{"id":11985,"date":"2026-08-06T13:35:43","date_gmt":"2026-08-06T12:35:43","guid":{"rendered":"https:\/\/www.rldatix.com\/en-uki\/?page_id=11985"},"modified":"2026-10-07T10:52:25","modified_gmt":"2026-10-07T09:52:25","slug":"smart-match-roi-calculator","status":"publish","type":"page","link":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/","title":{"rendered":"smart match ROI Calculator"},"content":{"rendered":"\n<div id=\"smroi-wrap\" style=\"width:100%;\">\n  <iframe id=\"smroi-frame\" style=\"width:100%;border:0;min-height:1000px;display:block;\" title=\"Smart Match ROI Calculator\"><\/iframe>\n<\/div>\n<script>\n(function () {\n  var DATA = \"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuLUdCIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICA8dGl0bGU+U21hcnQgTWF0Y2g6IFdvcmtmb3JjZSBST0kgQ2FsY3VsYXRvciB8IFJMRGF0aXg8L3RpdGxlPgogIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJFc3RpbWF0ZSB0aGUgY2FzaCBhbmQgc3RhZmYgdGltZSB5b3VyIE5IUyBvcmdhbmlzYXRpb24gY291bGQgcmVsZWFzZSB3aXRoIFNtYXJ0IE1hdGNoLCBhIEJhbmtTdGFmZisgZmVhdHVyZS4gSW5kaWNhdGl2ZSwgY29uc2VydmF0aXZlIGFuZCBlZGl0YWJsZS4iPgogIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI+CiAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj4KICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI\/ZmFtaWx5PURNK1NhbnM6b3Bzeix3Z2h0QDkuLjQwLDQwMDs5Li40MCw1MDA7OS4uNDAsNjAwOzkuLjQwLDcwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgPHN0eWxlPgovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgU21hcnQgTWF0Y2ggUk9JIENhbGN1bGF0b3IgLSBiYXNlIHN0eWxlcwoKICAgVGhlc2UgYXJlIHRoZSBvbmx5IHN0eWxlcyB0aGUgY29tcG9uZW50IG5lZWRzIGZyb20gb3V0c2lkZSBpdHNlbGY6CiAgIGEgYm94LXNpemluZyByZXNldCwgdGhlIHBhZ2UgYmFja2dyb3VuZCBhbmQgZm9udCBzdGFjaywgYW5kIHRoZQogICBuYXRpdmUgZm9ybS1jb250cm9sIHN0eWxpbmcgdGhhdCBjYW5ub3QgYmUgc2V0IGlubGluZSAocmFuZ2Utc2xpZGVyCiAgIHRodW1icywgc2Nyb2xsYmFycykuCgogICBFdmVyeXRoaW5nIGVsc2UgLSBsYXlvdXQsIGNvbG91ciwgc3BhY2luZywgYW5kIGFsbCBhbmltYXRpb25zIC0gaXMKICAgaW5saW5lIGluIFJPSUNhbGN1bGF0b3IuanN4LCBzbyB0aGUgY29tcG9uZW50IGNhbm5vdCBiZSBicm9rZW4gYnkgYQogICBob3N0IHBhZ2UncyBzdHlsZXNoZWV0IGFuZCBjYW5ub3QgbGVhayBzdHlsZXMgaW50byBpdC4gS2V5ZnJhbWVzCiAgIChrU2xpZGVVcCwgcmZhZGUsIGdsb3csIGNhbFNwaW4sIGNhbFB1bHNlKSBhcmUgaW5qZWN0ZWQgYnkgdGhlCiAgIGNvbXBvbmVudCBpdHNlbGYgYXQgcmVuZGVyIHRpbWUuCgogICBVc2luZyBST0lDYWxjdWxhdG9yLmpzeCBpbiB5b3VyIG93biBhcHA6IGltcG9ydCB0aGlzIGZpbGUgb25jZSwgb3IKICAgY29weSB0aGVzZSBydWxlcyBpbnRvIHlvdXIgZ2xvYmFsIHN0eWxlc2hlZXQuCiAgIFRoZSBzdGFuZGFsb25lIHJvaS1jYWxjdWxhdG9yLmh0bWwgYWxyZWFkeSBpbmxpbmVzIHRoZW0uCiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwoKKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KCmh0bWwgeyB3aWR0aDogMTAwJTsgfQoKYm9keSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgd2lkdGg6IDEwMCU7CiAgbWluLWhlaWdodDogMTAwdmg7CiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgYmFja2dyb3VuZDogI0VFRjdGMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBhbGUgZ3JlZW4gcGFnZSB3YXNoICovCiAgZm9udC1mYW1pbHk6ICdETSBTYW5zIFZhcmlhYmxlJywgJ0RNIFNhbnMnLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKfQoKI3Jvb3QgeyB3aWR0aDogMTAwJTsgfQoKLyog4pSA4pSAIFJhbmdlIHNsaWRlcnMgKHRoZSBjYWxjdWxhdG9yJ3MgbWFpbiBpbnB1dCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIE5hdGl2ZSBzbGlkZXIgY2hyb21lIGNhbiBvbmx5IGJlIHN0eWxlZCBpbiBDU1MsIG5vdCBpbmxpbmUuIFRoZQogICB0aHVtYiBpcyBkZWxpYmVyYXRlbHkgbGFyZ2UgKDMwcHgpIHNvIGl0IHN0YXlzIGNvbWZvcnRhYmxlIG9uCiAgIHRvdWNoIHNjcmVlbnMgYXMgd2VsbCBhcyB3aXRoIGEgbW91c2UuICovCmlucHV0W3R5cGU9cmFuZ2VdIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgaGVpZ2h0OiAxMnB4OwogIGJvcmRlci1yYWRpdXM6IDZweDsKICBiYWNrZ3JvdW5kOiAjRDRFMEREOwp9CmlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYmFja2dyb3VuZDogIzBGNDE0NjsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyOiAzcHggc29saWQgI2ZmZjsKICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMTUsIDY1LCA3MCwgMC4zNSk7Cn0KaW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWIgewogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMzBweDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYmFja2dyb3VuZDogIzBGNDE0NjsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYm9yZGVyOiAzcHggc29saWQgI2ZmZjsKfQoKLyog4pSA4pSAIE5hdGl2ZSBjb250cm9scyB0aGF0IGlnbm9yZSBpbmxpbmUgY29sb3VyIOKUgOKUgCAqLwpzZWxlY3QgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6ICMwRjQxNDY7CiAgYm9yZGVyLWNvbG9yOiAjRDRFMEREOwp9CgovKiDilIDilIAgU2Nyb2xsYmFycyAoV2ViS2l0KSDilIDilIAgKi8KOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiA4cHg7IH0KOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6ICNFRUY3RjI7IH0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6ICNDMkQ0RDA7IGJvcmRlci1yYWRpdXM6IDRweDsgfQoKLyog4pSA4pSAIFJlZHVjZWQgbW90aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBWaXNpdG9ycyB3aG8gYXNrIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0gdG8gcmVkdWNlIG1vdGlvbiBnZXQgdGhlCiAgIHNhbWUgZmlndXJlcyB3aXRob3V0IHRoZSBjb3VudC11cHMgYW5kIHRyYW5zaXRpb25zLiAqLwpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIgewogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogIH0KfQoKICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxkaXYgaWQ9InJvb3QiPgogICAgPGRpdiBpZD0ianMtZmFsbGJhY2siIHN0eWxlPSJjb2xvcjojM0Q1QTVFO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTIwcHggMzJweDtmb250LWZhbWlseTonRE0gU2Fucycsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDsiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzBGNDE0NjttYXJnaW4tYm90dG9tOjE2cHg7Ij5Mb2FkaW5nIGNhbGN1bGF0b3IuLi48L2Rpdj4KICAgICAgPGRpdj5UaGlzIGNhbGN1bGF0b3IgbmVlZHMgSmF2YVNjcmlwdC4gSWYgdGhpcyBtZXNzYWdlIHBlcnNpc3RzLCBwbGVhc2UgY29udGFjdCB5b3VyIFJMRGF0aXggcmVwcmVzZW50YXRpdmUuPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNjcmlwdD4KICAvLyBCb290LWZhaWx1cmUgc2NyZWVuIGZvciBPVVIgT1dOIGNvZGUgb25seTogZXJyb3JzIHJhaXNlZCBieSBicm93c2VyCiAgLy8gZXh0ZW5zaW9ucyBvciBob3N0LWluamVjdGVkIHNjcmlwdHMgKGFueSBvdGhlciBvcmlnaW4pIG11c3QgbmV2ZXIgYmxhbmsKICAvLyB0aGUgY2FsY3VsYXRvci4KICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uIChtLCBzKSB7CiAgICB2YXIgb3duID0gcyAmJiAocyA9PT0gbG9jYXRpb24uaHJlZiB8fCBzLmluZGV4T2YobG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCkgPT09IDApOwogICAgdmFyIGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnanMtZmFsbGJhY2snKTsKICAgIGlmICghb3duIHx8ICFmKSByZXR1cm47CiAgICBmLmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJjb2xvcjojMEY0MTQ2O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjcwMDsiPlNvbWV0aGluZyB3ZW50IHdyb25nPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2NvbG9yOiMzRDVBNUU7Ij48L2Rpdj4nOwogICAgZi5sYXN0Q2hpbGQudGV4dENvbnRlbnQgPSBTdHJpbmcobSk7CiAgfTsKICA8L3NjcmlwdD4KCiAgPHNjcmlwdD4KLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIFJMRGF0aXggU21hcnQgTWF0Y2ggKEJhbmtTdGFmZispIC0gV29ya2ZvcmNlIFJPSSBDYWxjdWxhdG9yCiAgIFBsYWluIEphdmFTY3JpcHQuIE5vIGZyYW1ld29yaywgbm8gSlNYLCBubyBidWlsZCBzdGVwLgoKICAgR0VORVJBVEVEIEZJTEUgLSBkbyBub3QgZWRpdCBieSBoYW5kLiBCdWlsdCBmcm9tIHRoZSBtYWludGFpbmVkIHNvdXJjZSBhcHAKICAgYnkgc2NyaXB0cy9idWlsZC12YW5pbGxhLm1qcywgd2hpY2ggc2hhcmVzIHRoZSBjYWxjdWxhdGlvbiBlbmdpbmUsIHRoZQogICB0aGVtZSwgdGhlIGRhdGEgbGF5ZXIgYW5kIHRoZSB3aG9sZSBsZWFkLWNhcHR1cmUgY29yZSAoSHViU3BvdCBjb25maWcsCiAgIHN1Ym1pc3Npb24gYW5kIFBERiByZXBvcnQpIHdpdGggdGhlIFJlYWN0IGJ1aWxkIG9mIHRoZSBzYW1lIGNhbGN1bGF0b3IsIHNvCiAgIHRoZSB0d28gY2Fubm90IHByb2R1Y2UgZGlmZmVyZW50IGZpZ3VyZXMgb3Igc2VuZCBkaWZmZXJlbnQgc3VibWlzc2lvbnMuCgogICBNb2RlbDogY2FzaCBzYXZpbmcgPSB0aGUgYWdlbmN5IHByZW1pdW0gZGlzcGxhY2VkIHdoZW4gYmV0dGVyIGJhbmsKICAgdXRpbGlzYXRpb24gbW92ZXMgZHV0aWVzIG9mZiBhZ2VuY3kgb250byB0aGUgdHJ1c3QncyBvd24gYmFuay4gQ2FwYWNpdHkKICAgKHNoaWZ0cyBtb3ZlZCkgaXMgc2hvd24gc2VwYXJhdGVseSBhbmQgbmV2ZXIgYWRkZWQgdG8gdGhlIGNhc2ggc2F2aW5nLgoKICAgVXNhZ2U6IHRoaXMgc2NyaXB0IGRlZmluZXMgb25lIGdsb2JhbCwgU21hcnRNYXRjaFJPSSwgd2l0aCBhIHNpbmdsZSBtZXRob2QuCiAgICAgU21hcnRNYXRjaFJPSS5tb3VudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KKGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgovKiBSTERhdGl4IHdvcmRtYXJrLCBpbmxpbmVkIHNvIHRoZSBjYWxjdWxhdG9yIGNhcnJpZXMgbm8gZXh0ZXJuYWwgYXNzZXQuCiAgIFVzZWQgYXMgYSBDU1MgbWFzayBvbiB0aGUgc3RhcnQgc2NyZWVuIGFuZCBlbWJlZGRlZCBpbiB0aGUgUERGLiAqLwpjb25zdCBybGRhdGl4TG9nbyA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQ2dFQUFBSHVDQVlBQUFDODN6N3VBQUVBQUVsRVFWUjRuT3pkZVp4a1dWbm4vKytUVVJYUmxWMWRCVVVWZERNTmpTd3F5eUFJb3l3aUNyZ01pcU15eUtZd2JxT2pLTGloS0NPb0F6Z3VJTXd3QWpJNklPQXUvR1RBUVVVRlJSWVhjRUZBQkdsbzZaWXFDNnE2T291SXFzanY3NDl6VHQ2YlVWbDdSSnlJRzUvMzZ4V3ZlK05HWk5XVG1aSDNubnZPYzU0amRVdElHdVJ0VzAvUytnN0hpL0xhSUQ4Zm5PVjltSTJlZHY3ZHJNODdFR0FINWJPNTlYbTB2YjlTTEt1cUwwbTJEK1huNVhleDAzbGpVTjZ2ZEc3cHQxN3JpL01LZ01Wd3h2bXJkVzA1VzNzVm1KVlF1bVp1TzJaN2IzbVM5OHQ3eXJWMDBINXVlMS9yZWZrYzkvSm51LzN2dDYvTjVmOGY3SEFjdUJUdHovUFdmWDMrREMvVCtiWDhQZEEzQWN6UDVIV29mZis0VE9jUFRFZFA2UnpjazdhdUkwVi84cmwydVBab2Uvdm5qTGJXRHNmSzhUakhjd0FBQUdDUmhMYVBueDVRMDliZDZoK2NlSDF5djIvN0FiYWZhL3U0TDh4SGJUK3QxUzV2dDYwbit5NG4yOWNBZ0FVWG11aW9zNzIzblBSM1NOWXBGNTZCZGs0R0tTZi95UTRkek42MmhnS3dJS0lNYXJjYnA5cTVzeFpUbE0vQjZ6cjdlYUYwdFBkMTVnQnBPeEd3cCsyZDhoSy9Qd0NMWVpEYnF1V2NWZHExd1lQSERCL3Iyam5ocnJ3KzJPRlkwZTYwMnpmeDc3UTc5M2I2OThzOVdQdDUrYndEczNDdXovbWlQdHB0MkdKZEpBTUM4OUsrdCt5MWprbjF6dzg4WnZ1UW1yN2d5ZXRIcjdXZGJDZWQ2MW9qdFJJSmQzaFAyMEE3VDJ3SEFBQUFGczVFRHNVZ2o1L3VOUEUzOHZzUHFEVnh4dmFkYmYvT0JTYjhYYWhmdEgyUC9QOGRuSWlsbmZkQkxnSUFMSW4yb0ZPN3M2VW9NM2kzSFc4bENmWW50cGlmc3lYajBQR0Y2dHhVdFpIT3JDYUMrU2pWaUVwQzMwNTZ0dmUxM2pkNS9wajhPZ1pTQWRSVUJnd24yNldIZG40N01ETm5KTXI3ek1vMjJ5cjdhWWRycU0rc3N0WlQ2dEE3WXlDOWxlUy9VOGNnblhDNExHNW1uQmZyM2w3SmNxRzFKekZPM0ljQW1MR0phOW02dGljQmNuMWFQYUV6SjVGdlM5S2JiT2UwenVIdHhMOSs2NzFubTRoeHRyN28wcmRCL3lnQUFBQVdVVm1Kc1NodDN6dm1nazNYdE42bi9OcExwcHo0ZHpZUHlQL2xaUDg3ZlMwQU9xOUxuUWg5MjNzaTRsanJXRWh5YXl1bFpKSmJTeHBGeEluV2V3ZVNiSHR2UkJ4VnVpQ04xYTJmMFNLeVVnTmhRNmx4c0V2cDV6NXNIUWVxc2IwL0lvN2w3WEdsenl6bmh6bXdmZXQ4UHBhMm44ZWxkTTRlcWtsRUdMWmVDMG03ODdaOXZMeTJwdlQ3QTRDYStwSk9LWjNiK3BKRytmaTZwSk8xZ2tMMzJiNHFJajZ0NWpNbmJVKzBMOGZMdFhhclBUVHg3K3lOaUZIci9UMmx0bnhQRjllR0x3bXhJMjIvMWdPWHF0KzZyeS9LNTN1elJrQVh3Vkthc1I0Ui81ci9YaytMKzJKZzN2cVNScmJ2R0JFZnpjZTQvKysydnRJNXVMVFB6NlcwMThzNSs4REVOVWRLMTUxTnBiNkowY1JycGUxeldrM2ZSTHVmYVhjK052bDFBQUFBd0NKcDkybExUWnQybXp4WjVobVNmbkJPY2JVOVdOSUhJK0t3bXZ1OGd4RnhwRUlzQURBWFhlakFtcnpBRkdYVzVXU1N5RTRYbjMwUmNiT2FUcDVCM2gvYi9wR3BSNHkyTXR2MVUwcS9teXNrM1JnUi8wZG4vOTBDODFJYWhNK1g5R2xKTnlpZEgyNm45Tms4WFRHMnpvdUlIOCs3UGFYemNVbEFLT2VHeVJ1S3lZVEFNdGk3UzAzbmVrazJaaUFWUURVNU9lVVdiWitrc2svcHZQV3Y5U0lEdHQwNy9ZdWtOMHI2ZTZYcjVsOUZ4TjhvWFZOSCtYTjhvbXpWU2hyTXRpYjBPQy81a1R2Y3lyM1dxZncrRXY4d1ZiYi9uNlF2cXgzSDVZcUlkbjlOMzNaL1lpSWpnT2xhdDMyRm1rbkQ2N1p2cVIwVXFqcWxsTWhYMmthdmwvUldwU1M5M1pMZUxlbXRlZUxvdmp4eGRLc3ZzNTBjbUFjYWI5YVpFeGd2cEIxMG9lOERBQUFBNXFXTXY0M2JFNFh6L3NuV2E0K1Y5S3QxUXR5eUdSRzdKSzNadm0xRTNGZzVIZ0NZcVM0a0FVb1RGZU5hQTFHVHRoSkc4a0RyM1NROVh0Slg1WDBzanJ0RnhEL1dEZ0lyTDVRcWhOTFp1bGdPUzNxTjBvM0QzK2VPOXJKTVQ3a1d0Sk9JUzFKNFNVUTQyelVDQU9hcEoya3pWM2s2WGc1eXpjR1MralZKZnlUcFZ5UGlsSnByN21RRndmTU5ZazhtRWdJWHEyKzdFNStoaUxqQzl1N2NlVTRWYTJCK1NqL0ExWklZSE1MbE9DTHAxVXA5RTYrUTlJazhJYUlvbFpoUDVYdUNNa0c5ckdDd0tXbTM3U3ZhOXdzQUFBREFJbWhOaEdsclQ0clprTFJuN29HZDNUZEh4Qy9adnBJeFFnQmQxb2trd0haQ3g4VCsxUkZ4azZTQjdjK1g5RTJTbmx3eFZGeWdpQmlJS29Db2J5QnBTRUxHMG5paHBGZEd4TjhwelRpNnBqV2paNmVsTnZtOUFxaG1oNFRrZ2UwclJTVkFkTXVtcEorWDlDcEoveEFSbjFTcW5GT1cybVBKTzB5ZDdkTnFacVF2cllsS2dOTEU1RWNBMDVXcnRuMVN6WDFpWjVLS3NiREdrdjZmcEwrUjlQeUpKY2xZSFFVQUFBQkxJNjhDc2hZUlIyemZSNmxxOWlKNlpVU1FLd0tnMHpxUkJLanRGZjdLc2xUN0pUMUgwbmRXalF5WEpBOTRNTWlCNm5MVjBHUG5mU01XMGRNbHZTb25Bclk3MENlWEVRYUFlV3ZQaU55Yks2Y054V0F6VnNNSnBlWDBYaDRSYjFGelRXYXBPMHhGVnlid1JNU1Zralp5WXRJeDBYNEY1bUdndE96OVdDd0hqTHBPU1BvbFNhK0ppRDhYMXdBQUFBQXNscDdTY3I4SEl1S29tcUlxOTVEMDNycWhuZDhPRXk4Qm9ETVc0UVJYa2pIYWd6NjlYSXIxZU90NHVaaVVxaW1oTklBNlZITmh1WitrRjBoNnlKeS9CMHhaUkt5SlFVQXNpSzRNSks2NEYwcDZ6c1RTTyswbGRuYjZIVTllZHlTV0tRUXdQVHNtUEhITndZcTZRZEl6SXVKVitYbDdNbEJmMnlzSHVuVjhsODZjTkZRcXdMV3Y3K1crbDcrdjdvdGNDWEN0ZGlDWHEzVlBUSUlzVUVjdm4wK0FSZkltU1MrUjlFYzVRVnphM2s4eDJWWWE1MGY3UFlNTFhHNiszUVlEQUFBQTJrcCt4MVk3MC9hMWtqNVdNNmlMRVJHUmx6VCt0TktFL1Y0ZUQ2UXdESUNsdGdoSmdGSWE1QmxxNTQ2SDlnRFFqdFdiYlArcXBNZk9MRHJNSFVtQVdDUWtaSFRPRDBoNldVNDBMMHBIZWVrTVA2R0pUbkkxTnpKbFpoTUFYQTZTQUlHenUxNnBvdStiMmgxdnVTTnVwS2E2YjN2Q1dFOW5McHMzdVpRZWxjYTdqeVJBQU5OQ0VpQ1d4WnNsL1pTa1A4dDlHZXUyMTNhWXpGZ21TclQ3MXZ0NVd3WTk5MGhTNjJ2RDltMG1saW9HQUFBQXRyRjlaMGtmcWgzSHhjb1ZBZnRLZlM4anBlNzVkbUVRQUZnNmk1QUVXRHEwKy9ta2VsVGFHdURaVkZyKzVoNFI4ZmY1K0w2SU9MNHM1V1J4YVVnQ3hDSWhJYU96M2lqcCt5TGkvYllQVFZRSkxCVm1yNUYwS25kNDk1UXFEcFhPYzViakFYQTVTQUlFTHR5TEpUMC9JajZjbi9kdDc4bExhVThtOVEyVXJ0TW5sUk9vYk8rVE5LWURieVdRQkFoZ1drZ0N4TEw2dUtUL0x1bTNJK0tmSmUzSmt4MlBTYWx2WGRKNlJIeFNxWDlqOGpwenRza1ZBQUFBZ0NUSjl2NVcrL0tPU2hONmwxSkU3TkwyOWkvamZ3Q1cyaUlrQWZieUFFNFprRG5ic2s2U0pOc1BrdlMyZVFXSE9rZ0N4Q0loSVdNbEhJcUlJeE5WL3JaVkM4cko2YmVVcDNPUEVFRFhrQVFJWEpvM0t5MGQvT2ZTVm9YZVkwcWRjNU4vVisycXZsc1R5dVlaTE9hT0pFQUEwMElTSUxyaXBLUW5TSHBuUk55WWo3V3ZMU0ZwdDNaZStyZThSa0lnQUFBQUpvVlNkL2F5OTFtOE1TSytRaW41YnlCV0VRR3c1QmFoWTd4WEVnQnRYMjM3Q3VXVHErMjlTaGVRc1AzTWZCRWhBUkFBTUcySDh6WG1xL0x6bmxJbDJ1dnk4NUkwYjZVTzhFVklvZ2NBWUJVOVhOSzduUHhmcFh2YXNWTHl2dFIwMkpYbkErV2w3a2dBQkFBQUsyaVBwTmRLK25odVAvMng3UWZuZnZlK1VsdHFwTzBKZ0gzYisxdXZBUUFBQU52WXZzcjJIOWVPWXdvZWFmdGhhb3BVOVN2SEF3Q1haU0dTR0hhb3lMQ3VWTEZoMC9hREpmMUpuY2hRQzVVQXNVZzZNSXNGRisrYWZGM2FtTGhHbGVxQTI2b0VBc0Fsb0JJZ01GMi9JT2w3SStLa3BFMmQrZmQxem9yejZBd3FBUUtZRmlvQllsVThMeUorV0duaWhMVTk2UytVa2docFB3RUFBS0J0M2ZiOUpiMmxkaURURWhFaHh2NEFkTUNpZEl6ZnF1ell2bG9wNmVMZjJ0NFVDWUFBZ1BtNzBmWXRVcW9hWlB1UWxKTFc4K3ZjQkFBQXNGaStWZExOdGcvYmZtSTVtS3ZONzFVYTBPYjZEUUFBc04wemNvWEFUOXQrZHU2Ymw1b2tkTnBQQUFBQW1MU2hEaVVBU3BMdHZ4RnRYd0Fkc0FoSmdJT0krR2hPck9oSHhFMjJQeUxwM1pYakFnQ3N1TndSL3VNUmNkajIzb2k0U1pRQ0J3QmdrZDFhMGkvbmEvaFBSY1JORVhGQ3Fib05BQUFBenU0WlNwTWliZnVuYlIrc0hSQUFBQUFXaiszbjE0NWhCdjV0cXhBSUFDeXR1U3dIbkJNblR1U25BNlVxRE8xbGJTSzl6VStTOUlwNXhJVEZ4bkxBV0NRc3pZanNPa2xISlYwUkVVZVVybDFya3NhU2VubGJURDRIZ0Vrc0J3ek16OXNqNGtHdDUxdExlK1I3MVZ1VS94NXQ3NHVJNDYzWFRpaGQxNlcwblBCd2ZtSGpFckFjTUlCcFlUbGdvUEhLaVBndlNxdjNISWlJby9sNEdWdllyZFRmMzgvSFNudXA5STMwMVN3elhMNkdheHNBQU1CaWE3ZmhKdnZNdXRxVysxQkUzRlZOWDh4QXFXMWJubS83bVFEQUlwcEh4M2hFeEFuYjE2anBCQ2duemEyQmxueXhJQUVRQUxDb3JwZjA4b2c0a3BjVnRKcEV2N0h0L1dxU0JBQUF3T0o0b0J0M1ZVb0FYTGQ5TUNmNU9kK3ZLaUtPMjc1V3FVcjlMWklHdHZjb1hmTkpBQVFBQUt2b1NiWnZ5ZjMzajdCOVNNMUE2QjQxQ1lBanBmYlNJUGVibEQ2VFVYNS9HUThvZzhZOTBZOENBQUN3cUU3bGJVaXB6MHlTYkQreldrU3pkNWZjUjFoeWFFcGY0TzY4SlFFUXdNS2JSeVhBbnFSTnBZR1ZmUkh4YVRVMy9yYjluWkwrNXh6aXdCS2hFaUFXU1lkbnRPRFNYU05wSTkvMGJGVVRBb0NMUUNWQW9KNVRrdTRjRVRjb0RWaVAxVlQyM1ZUenQ5bitPdzNidDhuVmdMRzRxQVFJWUZxb0JBaWMyN3NsZlZORXZDYy9YOC9iOG5jemtxUXlZVEpQdkdnUG1nN3llMWxGQVFBQVlMRnQ2eTliZ2Y3ckYwVEU5MnI3MkYrcENBZ0FDMjhlSGVOajI3ZFRxZ2g0WE0zTmZ0LzJUU0lCRUFDd2ZHNlU5TlY1LzJUZURwUVNDZFozK2dJQUFMQXdka3Y2V0s0TWVBK2x3ZWVCMHIzcmxmazkvZnlRVWpXYnEwZ0FCQUFBMkhKZlNlL083YWxuS1NYMGJkZ3VGUUg3dGc5RnhMRzhmUEJJS1ZuL2dGSWJhNmhtRWdZQUFBQVdTN3VRMUZnNXA4VDJaOVlKWjY2K1o0ZGo3UWxpOHlpeUJRQ1hiQjRucVpJWlhTb3NEUElNd0kvUDRmL0drcUlTSUJiSkNzeHF3YVY3bjZRdnlCM2FBSEF4cUFRSUxJNmhwSHRGeEQvbTUyWHdXcm1hL1MxSzk3SlUvMTE4VkFJRU1DMVVBZ1F1M3ZXU0hoZ1JON2FPRFd4ZmtWY0hPcTN0VlplbGxBUklOVUFBQUlERk1ybGFSbC9TeVBaekpUMmpXbFR6YzZ1SU9LYnRiZFhTUDBQN0ZjQkNtMGZIK0ZEcHBEaFNxcXh3SDVFQUNBRG9ocnRMK2xmYm55MmxSSUU4cXgwQUFDeVBnYVFQMnY1MGZoNTU0cHB5TmZ1eDBqMHR5MzRBQUFDYzNYV1NQcDZyQTM2OTBnRHBNQStnbHNwL1pTQjVYYmtTYzVWSUFRQUFjREhHU29tQXE1QUFLRW5mS2ttMjkwd2NwNG8xZ0lVM2p5VEFRZjUvMW0zL2pLUzN6ZUgvQkFCZ250NW4rN3FJT0I0UlIyMGZyQjBRQUFDNGFJTThhUDNTUEZndDIxZm4xeXdHcVFFQUFDN1VMOXMrYmZzbjgrU0t2dEtraXI3UzRPbUdtR0FCQUFDd3lNcnFCRkxxRTF1bGZyR2ZscVNJMkd3ZEs1TlpOczk4T3dBc2pua3NCOXhUcWdENFRrbWZONGYvRHgzQWNzQllKQ3pOaUl2dzFJaDR1VmdxRU1ENXNSd3dzUGkrSVNKZUpVbTJEMFhFNGRvQjRieFlEaGpBdExBY01EQmRiNHlJeHlqMWx3eVVsZ1llaStYVUFBQUFGbEY3NmR0ZHlwTTNWcW52T2lMS0JKWlJhMHNmRFlDRk44Mk84VUYrU050TG9ZN3pCWUVFUUFCQTE3M1E5cGZhM3F2bW1pamIrL0p1djA1WUFBRGdFdnh5cmd4NGRVVGNrby8xdFAxNjNsTmF6azZhenlRN0FBQ0FaZlJJMjdmWWZxdlNJSEpwUTQzVjlKOUVxLzlFcmVOYmNuOUxhWXV0VDc0T0FFQ0h0SytEdllublM5UC9ZUHRBNjJuSkh6ampHbytGTkZCcXF3MlZWcy80cHNyeDFEQ2FlTTRZSDRDRk40MGt3TWpMSGc0bERYTjUvNksvU2huaEFBQkllcTJrbjFHK01aS2tpRGllcjVXajNHRU5BQUNXeDQyMnYxOU41K2NvWDllVm4yL2s2enYzdmdBQUFPZjJrRHpKNHJWS2JhaHJsY1lVOWtweVJCeFhhbk90cTFrdWVMMk1PVVRFQ2VVcUxMWjNWWWdmQUlCNUdTb2xITFVUc1piSnVpUkZ4TkdjNUQrWnlJakZacVhLemV0S3Y3ZWhwRWRYaldqT2JGK3RKdUgyVk0xWUFPQmlURzJtUUw2QWIrWWJjZVViODA5TjY5L0hhbUU1WUN3U2twbHhpZDRYRWY5V3phejJNdE45VTV6ZkFMQWNNTENzN2g0UkgxUzZ2cThyRFZydmlZaFRXcjRPK1M1aU9XQUEwOEp5d01COHZGblMxK2JrdjdaZWZwVHFLK3RLU3dsTHpiVXhsSzc1TENjTUFPaXE5cld1TEUxcUxVZENrdFdNaTNCZnU3eTJQb08yeCtwQWY4dEZlRXhFL0ZiZUw1L2ZzaXd3QUN5c2FaeW9TeWIvTUNjQUJnbUFBQURvN3JiZm5QZUgwbGFDUERlN0FBQXNyL2ZaL2pGSnNyMHVhWnp2Zzh0QU5BQUFBQzdjd3lVZHMvMnJTbTJwbnRMZzZsaTU0bDkrMzhtOEhkaStLdTliRXRVQUFRQ2QxRnB4b0NTN3J5bU5NNHp5OFVWL1NHbmk1QUZKdS9QemZoNGpLY3NDWTNHVnFvM2xNOWpYNmsxK3ZhZk9ITTlqOGdtQWhUZU5KTUJTQWFHY0JQZUlCRUFBQUNUcG9iYS9yVHpKcGU5WkRoZ0FnT1gySTdZZEVVZnk4N0RkVjlPcERRQUFnSXZ6V051YnRwK2xwcnBLU0ZyTEt4QVZ3NGk0UlUzeXdLb05SZ01BVmtSWmVhODhiVzFMUmNCRjE1ZlNtSWhhUzZwR3hER2wxWkt3Mk1yS1ZpVVpjS1NVQTdKS2JwMjNKUWVtclBRRkFBdHRHa21BUTZWUy9LZHNIN0Q5eGluOG13QUFkTVZMY2llMnBLMmJkMmE2QVFDdzVKeDhpNlMxZkgxbk9SQUFBSURMODE5ekcrc0pTZ091dmJ4VXNITXlZS2lwd0VMZkNnQ2c2MHFWM0tJay81VnF1WXY4R0t0SklDc3JKVjJWdCswRWZ5eXVzZTFWbnZEYTd1Y3JmNHVzQkFKZzRVM2pKTlZUdnZHMi9XZVNIamlGZnhNckxpTFd4SktaV0JDMitTeGlHcjVWMHE5TDJweVl4UWRnTllWMmFPdHd6UUdXMGhzaTRtdHRYNUVIcVZGUDJENnQ2VXg0cktwMVQ3emo5UUxBelBYeStRUkFYYmVYdERzaVBscVNBSE1GSVlsckpBQ2d3Mnp2emRWdlBYSDhDeVI5bGFSRkgyTTRKZWwya281SXVrTFNla1I4YjkyUWNCRW0yMW5ydG0rcEZVd2x6NHFJbjFDZW1KS1BqZFhLalFHQVJUU05KTUMrVWliNE4wajZwU244ZXdCSmdGZ29KR1JnaXE2TGlJOHFYVHVwRmdTc05wSUFnWTZKQ0dZQzEwY1NJSUJwSVFrUVdCeXZrL1NmY3ZKZlh5bXBZTGZvVndFQXJJaWNFSGpDOXRXU1BxcDBIVnc2RVhHbDB1cUNXQTViaVcrMjkwcTZ1V1l3RlR3OUlsNmtWTW15cjVUNE54Ympld0FXM0lWMGpKZUJqUFc4N2JXTzlTU05iRDlLSkFBQ0FIQSsxeXRkVDB1NS9yYVFLSVVQQU1DeXlrdlgzVE0vN1duN2tqM3JFMi9mS1dHUUplMEFBQURPOU5XU1BtWDdoMnhmb2RUczZyZmZrQWVtcFRRb081ZzRCZ0RBTW91OHNsQkV4RTFhMGdUQWJGZzdBRnl3ZHRMYitvcXVibldObXMvc1NFMk9EQW1BQUJiYWhTUUIydmExa2paeVlzS2c5WFZqMi9lUjlOb1p4UWNBUUtlMFNxYXY1ZWNIMUVvTWlJaWJOWjFLdlFBQVlQNyt6dmEzcWVrb0RhVjc2STNXUUhRb3RRTW1yL2ViYzRzU0FBQmcrVHhQMGpIYm41bXJJWlcyVlM4UFRQY2w3VkllckkySW5TWmdBZ0FBNFB6YTdhaWhWblBpNmtkeWU3Tjg3eU9sbFJvbUovb0N3RUs1b0NWeUl1SUcyL3NqNHJoU21kNnh0Rld0Nk4wempBOEFnTTZ4L1FhbFJQcURFWEZVNmRyYXQ3MWYwaDZ4NUJzQUFNdnNKYmIvS3UvMzFReEVUODZhbnJ3ZjUvb1BBQUJ3Zmgrdy9UOXoyMnFnbFBnbnBZSFowL2xZZWI3TTFaSUFBQUJxS3Uyb3NWSWkzRDlWaktXR3QrYjI1amcvTDhtQUxHa05ZS0ZkU0JKZ3lXWWVxeW1sZjAwKzl1WlpCQVVBUU1jOTB2YlhSc1FSMjRmeXNXRkVITE85cHBRd0FBQUFsdGQ5YlIrWGREcFBubXRmMjYxVTlXOVRWS2NCQUFDNEZOL3A1SjdhdnJUZ3lQWlZlWi9sMmdBQUFDN2RxZGIrU05McktzVlJSVVM4cCt4SzZ0bStzbUk0QUhEQkxpUUo4TFMwVmJWZ1pIdHZSTnhvKzJtUzdqL0w0QUFBNkxEZmtxU0lPQ0pKdHEvT3owZWlreG9BZ0M2NHl2YnBYRkYvVjJ2Sk9pa2xBcFlIaVlBQUFBQ1g1aTl0LzdQdC9YbmloZktFeTMyU1BOSCtBZ0FBd0lYcDZjdytxOStzRkV0TkE2WFZ1OGE1ZjA5YXphV1JBU3lSQzBrQ0hMWFdPM2ZyYTE0d3M2Z0FBRmdCdHJjRy95UGlKdVZaNnJZUDFJME1BQUJNUzY1U2N5QWlUdXJzQ1g4a0FnSUFBRnlhMjB2NmxLVFB5czhIRWRFdWJBQUFBSUNMVXhMZGRpdjNXYlVxNDYyUzAyTDVYd0JMNWtLU0FLVzBkTkhZOXNHSU9KNlRGZ0FBd0dYS2xYV2Q5LytOSkVYRTBab3hBUUNBcWZ0WXZzN3YwZmFsZ1FFQUFEQWQ3N0w5S2FYbGdjdGdMWlZhQUFBQUx0NjR0ZDJkOTFjcEdlNk51YkowK1RrTWxKSWhvM1VNQUJiU2hTUUJycGRraEZ4Sy93a3pqZ2tBZ0ZYeUF0djdsYW9CM2xDV3J3RUFBSjF6dmUxMTIzMHhJQTBBQURBTCszTVY1bnZtNTdTNUFBQUFMbDQ3Q2ZCVTN1OUorbVNkY09idVo3VjkxWTZ5WXVia0Vza0FzSEF1SkFsd1E5SzZVb2F6SkwxNmR1RUFpZTFiMTQ0QmtLU2NuQVhNMnFlVXF3SkZ4SEhSU1EwQVFGY2QxcG5YK2QxS25ZaFVDQVFBQUppT3Y3UDlERW1qSFY0YjJONmI5MmwvQVFBQTdHeW5aTGN2bTNzVUZVVEVIMGJFc2RhaGRoVkVWc3dFc05ET213Um8renFsRTl2UTlrZG1IaEdncmFVdzZZUkJiYjJKUmg0d003Yi9uVkpTd0xvb0p3NEFRSmQ5eXZhMVNoUHQxbHZIZHhxa0JnQUF3S1Y1YnE0S1dDYjQ5cFQ2bTRjUmNUSWZwLzBGQUFDd3M1THNWcFlESGt1NnNWSXM4M1JEN1FBQTRIS2NOd2t3SXE2WHRHNzdrS1RyWmg4U2tPUmxzb0NhcU1hR2Vmb1RwWnNvRWdBQkFPaStqK1JsNmphVUJwLzdWS0FHQUFDWWlVL1p2by90UFdxUy9nWVJjY3oyd1pxQkFRQUFMSUZRczVMVkRVcGpXVjMyOWJVREFJRExjU0hMQVV0cFlPSVRzd3dFbURDSWlCTzFnOERLRzRsRVFNeFJYcXFHenh3QUFLdmhMNVdxQVVxU3FFQU5BQUF3TSsrVzlEU2xQcGRRWHRJdElvNVVqQWtBQUdCUnRjZXBUays4OXQzekRHVGVJdUxQYThjQUFKZGpwN1hjdDhrVkFPK2dORURSZFNjay9ZcWszNUgwanR3SlVKWmxQQzFwVTZuMGJmbTVyZVZqdUhTN2xYNmV3OWF4bnRMUGZEQnhISmkzZFVrYnR1OGFFUjlTVS9wYVNwOVBsZ3k1UEQ3SGEzMUo0MXdSNThHU0hpWHBQNmtwTzk1WkViSEw5aDRTb1lIT0MrMXdIclI5cm5NamdBNktDTnFWMHhPMlQrdkNKend1ckloWVU5UC93TFVCbUw5ZVBwOEE2SmF4cEFNUmNWek5aQXo2bndFQWk2emNFNFpTMStIUzNoOUd4QzZ4RXRLeUtHUDFSZmtjOXBURzdwYjJjM2dlRDQrSVA2d2RCQUJjanZNbUFVcWRINHo4Q2trZmpvZ1A2c3lHQjUzdDg3RXU2YVR0cTNJSGpHeGZIUkUzVlk0TGtPMjlyV1NzdnBxa1ZjNFBsNitubEVpOWx2ZFBxZm1adG04d1l2TDhJT241a2g0LzMzRG41clVSOGJXMWd3QXdjeVFCQXRnU0VXSDdRRVFjclIzTGtpTUpFTUMwa0FRSWROdmRJdUlmeFhVV0FMRDRTQUpFRFNXSFpQTHpWb3FuM0VQU2UrY2IwdXhGeEFYbHpnREFJanR2eDdqdFI4d2prRGw3Y1VUc2l1UVBJdUw5U28yT1VKb0IyTDZ3OWM3ekNCNlg5WkRTOGd1T2lGdnk4L1pyUUczOXZCMG9KYW1WMmNIbHBvdkhwVC9HK2VjNFZxcCtNM2t6VVdaa2w1OTFYMUpFeEUwUjhZVGNHTCtOcEZlclc3NG1WMEFFQUFBcnd2WTdTUUFFQUFDWW13L2EvcnJhUVFBQUFDd282OHc4a2xBYTArOUZ4TjlMT2p6M3FHYnJxMndmMFBhbGtBRmc2WnczMFdxWlp4VHM0TUVSOFdjVGxiM2FKcGNBQ0RFVGNOYjZTb2xWRWo5ckxMWlFhdkN5VlBYMDlIWDJwZS9LK2JlY0l6eHh2RmhYK2wxczJ2NVJTYytlU2FUejk4YUkrSXJhUVFDWXFSM2JtUjFyZXdPNE9QODFJdjViN1NDV0hKVUFBVXdMbFFDQjFmQkxFZkZOdFlNQUFPQWN5ajFoaUVxQW1LOHloamY1R2R3cmFTMGlqaS96NTNIQ3h5TGlqcldEQUlCcEtFc3dLbGNkMnBZVWFQdkxhd1ExQXorUnEvNjlYVkkvSndEdWxNVTkxUGJFbnE1Y3VCWlpxZjdGenhxTHJsU3NrMGdBbkphekpRQkt6VGxoc2tKZ2U3OG42YVRTNzZVZkVUK1dxd08rZUtwUjF2SElpZWM5cFlUSFlpQUFBTkExUDJIN0t5VXBkNmh1YlpVNlhybitBd0FBVE5jMzJuNnp0Tlh1Mm1wdnRkcGg1N0orL3JjQUFBQXNwVEtHNS9ZMklrNUV4TTM1Mkczbkh0VU1STVJuNTEycUFBSlllcUYwTXR2VTlzU0twWjlOa0wwL0l1Nm50RGI5UHFVa2tTUDV0WFdsa3JVQWdPVzFWWlV4SjdPUEkrS0U3WU9TYnRCeUQ1Yi9kRVE4WGVsNzJFcUd0SDJ3ZFMwRHNMeFdwUkxnQ1VsbDhPeWtwRDBWWXdHV3hiMGk0cjNhUGtsdnQ4NDlnUUlKbFFBQlRFdVhLZ0VlazdTL2RoREFvc3NUUzlXdWJxUFVKMVBPQldWUWVDeXFHQUVBNW9kS2dGaEl0ZzlGeEdIYlB5bnBCMnZIY3hudUZCRTNLdlc3OWNSbkZNQ1NLNE1La3llMG51M1BsdlIzOHc5cGF1NHY2YU1Sc2RONjlIM2JwU0lnQUdCSjVlWGRSMm9HeGJjTmt0cCtwcVNmcUJIYk5PUU82SEt0dHRMQTlwVmN2NEJPNkhJUzRETWk0Z1ZxS3VlMmwzOGZpRVNtMnNwbmJKRDNSNUprKzJwSlh5N3B6cEllSk9uaFZhS0RwR1lRV3BKczcyc05RbE9SK3R4SUFnUXdMVjFKQW55eHBCL0oxeEdjWFQ5dlQydm5RYit3ZlR0Sjk4NlB1K2J0ZmNRa2w2NjVmMFQ4cmFTUjdXdnlnUENrVUdwclRCWldBQUJnRmtnQ3hDTGF0bFN3N2QrUjlLaTZJVjJTZng4UmY2U212NjA5NlFNQWxsSkpMaWpWaGZhV3hBTGJINVYwaDRxeFhiTGNpSkNrY2I1WlA2cDA4dTVKMnFYbVJFNDFRQUJZWHUyQjhIYWlYRDhQbGg5UjZxamZKK2xURmVLYmhrZEZ4TzhxWGM4TzVHczB5VE5BTjNRNUNmQTVFZkhNSFk2M3o5V29aSWZyU1h0QzJObG11dzVzUDBEU1E3VEV5ZlZMNWtNUmNkZUpZeVNEblI5SmdBQ21wU3RKZ044VEVUOVhPNGdsTkxDOU95STJsUklEMisybWN5Vis5V3dma0hRUHBRa1ZYeWJwdmtvVmZiRThyb3VJaitiOXMxMkhTUVFFQU13TFNZQllWT3RLWTNTYnRxK1M5TnRhcmtuRmo1UDBsanhoYWtQa2pRRG9pRFUxTXgzVlNnRGNyK1ZNQUh5bnBFTnFyZGVlWit1VkJNQ3htbEt1RWlkeUFGaG03V1M0TWtncVNhT0lPSktULzV5dmJiZWRlM1RUOFhxbERtWGxoUGFpdC9QYkFXQWhiQ3AxVFBiVTNHdjBiRitwcHRPU1I2Vkg2M295eUwrZlhSUDc3V3ZNSUQrR0VmR1dpUGlwaU5nVm1hUjdTbnFsTUF0M3NmMXRlVGs2MmI1T0REQURBQzdlWHFYQnJPcHRrQVYvS0cvN1NtMmhZZTVMMkpCMFNrMmJkbE5Ob25tMGpoZmppRGljMjAwL0ZoRmZMT2xBYmpvTkpOMUYwcU1sdlZRTWdDK3k2MjAvdHZXOC9LN2J2MjhyL1E1cG53RUFnSlZrdXlSMTlpUGllRVE4VXRLN0tvZDFvYjQzSW40ekltN1NtZmtpazIxOEFGZ3FhNUtHWldCQjJrb0EvQy8xUXJwa2I1VDBwYm55MDBqNW9xTlVFV3EvY2hLRjBvMzVMbkVDQjRDdUtKMzBXODl6WmR2aitYanBoQi9VQ2UreTdkYjJhMWFJd1FJQWkrMW10Ukt6ODNZY0ViZmtmZk9vK3BEU1lQWXcvMzZHRS91YmFxNnJRelgzaTJXWmo4MjgzNCtJdjQrSUorZUV3S3VVQnJaZklVekxTNVNXR0Z5UGlPdkZQU3dBNE9MMWxLN250ZHNmaS83bzVXM3BVeTZUV1VKTiswbDV2MzAvZmlwdnkzdmJQM2RKMnNqSmhPdVNUa1hFaHlQaXRSSHgzUk1USys0bTZlbVNUZ3FMNGxkdFAwbk5aMlNrWnNtN09OY1hBZ0FBcklCK0hvT1RVdC9oUHFXMjBuK1E5UFo2WVYyUXAwYkVDNVJXNE5xdnB1MStNdmVCMHRZRHNOVFdKQ2tpMnRYeHhwS2VWeTJpUy9OTGtoNWZMalo1MllXZThzMTVSQnhUVGdySjd4OUtHdVVUT3dCZ0NlV2JDaWwzMHVmbm9YVGVQNkZXc2x5K0xveGF5OFV2RGRzL28rMlZCM3lPdHdQQUl0aWpuWk9WeXZtcmRxVVhIdWwzTVZuTnBLODBRRzAxMVFIVEx5eFhqRzk5Ylh2U1ZhKzhKdzlzLzZjOG5yMUwwaE9GeS9VSjI2WGkwT2ljN3dRQTRFd2xhYTEyMjJQUkh5WHhiNkR0cThrNEh5dkpmdExFSk1TOExlOHR4bXFxWTVmbjVmWFNsaXFKaHYySStNZUllRkZFSEd3bEJqNUUwaDhLTmIzQzluZm1QcVhDYXFwQlNxelVBQUFBVnB6dEF6bEhZeEFSbjR5SUIwbDZjdTI0enVMMkVmRWk1Ylo0emlIWktoNlYrMEJwM3dGWWFtdEtBejJsb2tON2dHZFp2RGNpdmowaWpwY2I4cnpFVlVuMEtKMHh3OWIzTmxCellnY0FMS0Y4RGkvTEY0N3pUWWFWT3RrSHlwMnl1U3JnVVRVZCs3ZXBFL0VsK3k0MWd3UUZsWUFBTExLeUZFU3Brakk1VUZxNzBzdXFQM2JuMzBXcFpLTFc4MUo5cGxRSFhOZjJ3ZTIyTWpoZUVndUs5clg1VjFvRDJjOFNMdFhQS1AyTXVmNERBQzVXU1Y2cjNmNVk5TWU2VXQvNFVFM2JabXRwNFB3ZWFYdTcxdHJlUG9yOGVyUmVMMTgzek50Qm5xVGVUalFzLzk5UXpWSmtFUkZ2aTRpSHQ5cFNueU1xTHRmd1B5VTl3UGExWjNsOTh5ekhBUUFBdW14ays2QzBsWmNoTlN1SzdJdUlYNVYwMjJyUm5lbjYzS3krVWFudFg0cEpEZFNza0ZKV3pKeGNIaGdBbHNxYXBJMThFMnRKc3YyYmRVTzZPQkZ4TCtVVGMrc2lJeldkS3p0VlN4aWU1VGdBWUxuc2RENjNtbzc3ZG5LNzgvT2p1UU45YWRpK1o5NGR0Y3FxQThDaUtwVlAyczhMemwvMXRYOEh3NG5YUFBGOFkrTDlrNi92ZEx4OWJkNDZIaEUvbnErL2Q1TDA3Z3NORnBLa2I3TjlhMjFQdHR5MjdDQlY3Z0VBWjNGbDdRQ1d4SWEydDJkS2d0OTQ0bjNqaVdPVFh6UFcyZHRMVWpOSnZmMXY3UFExbmpnV0VmRTNyWXJMYTVJZUplbklPZjR2VE04YkpEMWVUYVhzY2Q0ZmFIdUM2RmFWYkFBQWdLNkxpQjNib3JsdzB4VVJjVGozQmI1d3pxRk51bFZFM0VuYjIzS2w3N0xkTjJvS1NBSG9nalZKdllpNElUL3ZTWHAweFhndXlqSXU2d2dBV0JnUHJoM0FSZmdwNWM3a1hQRVFBSUNsbERzQVB6ZDNBajZuZGp4TDVGK1ZPaWI3clFrQlZyTmNDWjJVQUFCMDE1N1dmbDlwZ1BML1JzU2gzS2I2TEVtL1ZDZTBsZkZUdHQ5aWUzOWVqYWhVemk3YWxSMmxacWxwQUFDQWxSTVJOK2ZkWGtROExiZFpuemZuTU82Zi85OTE1WXAvdHEvV21aT2lBYUJUMXRSa1BROXNYMU16bUl2MFFKMDVHeE1BZ0FzU0VYOG02YWRyeDNHQkhxblVtVndxYXpHekhBQ3dyRFpzNzdWOWRVUThNM2ZHZlZYdG9KYUI3ZjhwNlZTZVVYMTFQanhTczR3SkFBRG9wbTFMa3RuZTEzcnNqNGdQU3ZyaGlMaFMwaldTWGwwbHl1NzdmRW0vbkZjakNxVnhsZk8xdzBnRUJBQUFxMmhyNG1vUkVUOHM2VGFTUG1lRy8rK2JKZDB0VjgvK3k5eFdMaE5ySjFlVkJJQk9XcE4wTXUvM2xNcmFMNFAzUnNRN1dQSUlBSENwYkIrSWlLZlhqdU5DNWFvLzdXVm1BQUJZT3JiM1JjU0ppTGlwSEl1STEwdTZyWmFyU204TjMybjc2cHhBZVZOdUc0UlNSMlpabGc0QUFIUlRYK2xhUDRxSTQ2M0hNYVhLZ0RjcEpRdU9KSDFIbm1oeFgwbXZxeFp4TnozSzl0Y3I5YzhNbFg3bVBUWEpmcVVDNE9TU3pnQUFBS3VvRkhSYWwxSVNYa1I4SUNmcGhhU0hTSHJUWmY0Zkw1QjByL3hQUGlJaS9sRzViWmJieWlPbGRuVGtmU1pwQU9pMGtDVGJleVBpaE8ybHVER05pTEI5YldzWll3QUFMb250dTByNllPMDRMc0F6SXVJbmxjdVcxdzRHd0dVckEwUGJMRXQ3L0R5ZUhSRS9MZ2E5Y0c1OTIxZEVSSHNwdFpDMHgvYnR0UnpYNWlwYVM1bVU1RC9wTE9lVUZSUzJUeXROZUZ4cUViR205RHZsZHd2VTBjdm5rMlgzbkloNFp1MGdNRFc5L05obGV5MGlUaXExQmNMMlZSRnhTMzdleTlzeUFmS1k3Y2VLQ29IVDlKMFI4YiswL1RvZGtuWkxPcVh0a3poWnpRZ0FjRG5LdFNhVXVnNlg5djR3SW5hSjYrSktzSDB3SW83a3ArdEtFeWNpVHc0K2xvLzMxVXh1bmZ6Ni95anBXa20zbDdRcmYvM0hKYjB6SXY2cXZDMXZJLzliUFVtbnRiMHR0cTFQSlZjR1BDNzZXUUIwMkM2bE1ZUmJhZ2R5RVo2dUZETUpnQUNBeXhZUi8yVDdMWkllV2p1VzgzaU9wSjlzSlV3QUFMRE1SaEV4eXZ2dGFpa2JrZzduaVYvUGxmU01XZ0V1S3RzUGsvUVhFZEZlR25DUEpwWUtCQUFBblRGUUd0QWM1OGNvelFuWTRqeVlXV3ptcnhtV0pjOGk0aldTWG1QN2FrbS9xc1h2QTFsMEw3YTlLeUplMURwbXBVSG5OcElBQVFEQXlta2xBTFpYdFhKSkFDd0ZxbHJ2MmFXY0RKZ25zZnptRHYvczJkcFZwVUx6MW4rZnR5WDVjTjMybFJGeHJKV0FDQUNkVldhVzIvYm4xZzdtUXVRYmF5dk55R1U1WUFEQUpiTjlTTkptUkh4UjVWQXV4Sm9rNVpuK0FBQXNxL1g4Mk5ZSm1MZnRwVG9VRVQ4czZRNDZjekIxMWIwNUQvUkh2aWNPU1J1MjkxYU9Dd0FBekVhcC90dlBqN2J5ZkdEN0d0djcxQXlFOXBTU0FXWDdvQ1JGeEUwUjhmQmNXZmlKOHdpK3cxNW8rMXRzSDFBejJEeFpWWVoyTEFBQVdEbTI5K1UyMGxpcHorcGdicWRLMGlDdlVMbFhxWTl3TEdtWXYyWnZuc1F5VUZNcHNOaFVVeG03Nk8zdzJKMWZLKzNoWVVRY2xqU3l2WmYrTXdCZHR5YWxiR3RKajZzY3k0VjRzTklKZTEzU21HeHRBTUJsaU56d2R4NUFmMTNsZUM1RVg5TG92TzhDQUdCeGJlVEhXS2tqYnpJWmNKRDMrNUw2RVhGRFJPeVY5Q1Z6alhMQjJYNnQwcy9ubU5KOWZhODFneG9BQUhSTEdmd2NLU1dWdGR0UDR6eWdPb3lJRzFzVkFRZjVNWlMyVldPUjBnQnFxUTY0WDlKMU00eTk2MzVCMGpXdFFXMHBqN2xrTERVSEFBQldUa1FjejhsOHZaellkNlJNYUZWcW4wYnV4OXJJeDNyNWEwcmYxbENwN1Z1V3dsYmVMNVd4eTdIeWZETS94dm5yb3ZWY1N1M2k5WWc0UWY4WmdLNHJWWVZPU1BxQnlyR2NWMFQ4bVZJbkIxVU9BQUNYYTZzak5pSk9Sc1RYMUF6bVF0aCtwcHJrQ0FBQWxsM3B2R3NyeTNlTTFDUytqeUxpRDNMRm1zMTVCYmZndmxyTnoyZHMrOVlWWXdFQUFMUGxpZjEyKzJrOHNSUndNVlFhVkQzbnY1Y0hXejhhRVZkSXVwT2s2eTh6MWxYMGQwcUpsR1V3ZXBlVUt1QlVpd2dBQUdBeGpDZVM3anl4TGZzN0xmTTcrVFhuT3VZZC9zM3lmS3h6dDQwQm9GUFd0RHpKQkwrVXQrVWlNTG4wQVFBQUYyTTlid2RxQnRFL1ZpbVdDL1VvcFZoNzUzc2pBQUJkRkJIcmtoNVRPNDVGWVBzZHVacHhxZTVEK3dBQUFGeTBQTmwrS09tV2lQaU1QUEhpN1pYRFdqWi9iZnQycFNxamxCSXNTUVFFQUFBQUFNelRtcHBLQ3dzdElyNUphVFpkNU9lMzFJMElBTERreXZXdnpBYnFTM3BRcFZndTFIMlU0bVdRSHdDd3FvWVI4VVpKbjFNN2tBWHdlWkp1bC9kRDU1NDFEUUFBc0tOU25TVlBLckR0UXhIeElFbTNyUnZaMHRsYWpybXNZaFFSU3pIMkFnQUFBQURvaGpWSnNuMmZ5bkZjS0N2RlhOYUxCd0RnVW8yVnFnR09sS3NCUnNRTmRVTzZZS1B6dndVQWdNN2FpSWkvaVlpQkZyK0s3Nno5bmRKRUJvdHErUUFBNEJMWVBxalUzNzR1U1JGeHVHeHpWY0I3aWI3NEMyTGJraFFSSjVWK252emNBQUFBQUFCenM2WjBNL3ExdFFNNWo2Zll2bnFINHd4eUFBQXVtZTByODI1SnF1dExlbE9sY0M3VSt2bmZBZ0JBZCtXQjZyNVNBdjluU0hwVzVaQnEybTM3WHNvVEdtb0hBd0FBbGsrcEFDaHBJMWV3Sy8wT0pTbnd2UkZ4aGFRSFZncHhxZGgrdDlMRTB3MldBd1lBQUFBQXpOT2FwQTFKajZvZHlMbEV4TXNqNHFiV29iSjBJOHNkQVFBdVZlU083bEMrcnRqZUkrbDdxMFoxSHJiL1hlMFlBQUNvS1YrL1N5VmZSY1NQUzNwYzFhRHFlb2VvTWdNQUFDNkQ3V3VrcmFXQk4vS3h0ZGJyK3lYOVk2NE0rRCtxQkxrODdtUDdleVNwTEE4TUFBQUFBTUE4bEJ2NSs5UU00Z0swQnpRMlcvc2tBUUlBTHRXYW1xVHlrTlNMaUU5SHhBY3F4blFodnFoMkFBQUExSllyeFkrVTdna2pJbjVOMGpWMW82cG10NlNlN1VPMUF3RUFBRXVwTCtubThzVDJBVW45bkJBbzIvc2o0bGhFSExHOU55SytPeWNEWGw4cDNtWHdmTnNMWFhnQkFBQUFBTkE5YTBxSkQ0dnNoS1RJblE5U1N0am81WDJXQXdZQVhLcHlMYkh0cTVTU0NKYWhpczc5OHZJOEFBQ3NxdlZjS2Q3NW11ZzhJSDJUcEx0VWpxMEsyMitLaU1PMTR3QUFBRXRwRkJFblNsOURSQnh0dlJZUmNVelNJTGUzVHVUamc0ajRMRWxNUWppNzM3RjliZTBnQUFBQUFBQ3JvMTBGYVZHOVFkS2UzUG5RbTNpTlNvQUFnRXQxcXV5MGxtZnBLMTFiYnQ3eEt4YkRmU1BpMVBuZkJnQkFaMjJVblRJUTNkcitrNlRiVjRxcnBvZnZjS3luWnRMZllJNnhBQUNBSmRSSzhKTlN4V1dwR1RzWVRydyt6TWVPNUtxQUw1MUhqRXZvWTlyZUppc0dvc0FCQUFBQUFHREsxclQ0TjV0dlZUUElVNVlDM2xVcEZnQkFkMWhOSjJ4Sk1pL0pkZStZZnpnWDdGb3RSOFZDQUFCcXNOSjE4azZWNDVnNzI2K3h2YTkxYUplYVN2cWpuYjhLQUFEZ3NxMUh4Rk1sM2JaMklJdkk5b2NrN2NsUDEvTjJLR2xrKytvNlVRRUFBQUFBdW1oTml6OFk4SWE4N1N2UFBMUzlPeC9iM1BFckFBQzRNT1Y2VXBMTHl3ejMzNm9ReThXWXJJd0xBQUNTWGtRY2pZanJKWDFXN1dEbTdQR3Q2c2J0KzJacDhWY0FBQUFBeTJ0RHFTcmdzWWhZay9UeTJnRXRtT3RzZjZWU1g4NkdKTm0rc3lSRnhFMDFBd01BQUFBQWRNdGE3UURPSncvZVNFMjFwbWd0ZzdoN2h5OEJBT0JDVFM3SElxVk8yZCtmZHlBWGlZcTRBQUNjZyszOUVmRVBrdTVTTzVaNXN2MEk1UW96RVhGTDNoOVhEUW9BQUhTYTdmMXFLZzliMGc5TDJsODFxTVh6YTdadkswbTJyNDZJRHlzdENRd0FBQUFBd05TczJmN1Mya0Zjb0ZLeGNMZWFaUkIzU3Q0QUFPQmluVzd0RDNKbjdDSmpPV0FBQUhZMlZscVM3bGgrL3ErUzdsY3hubm43ZlRWSmYxYXVOcE14MEF3QUFLWXV0N3Q2YWlZaUhFNmJXUGdDQkhQMmNhVStwMC9tNTZPY1FBa0FBQUFBd0ZTc1NmckMya0djUjE4cDJXK241WXRZMGdnQWNLbENUWUw1dUhVTUFBQXNyMUN6ek5yZXZDemQreVY5YzkydzVzZjJGWGwza0ovdnpjK1pSQUFBQUdhaDlLK2N6dnNsTWRBUkVaS2VWVEcyaFdMNzNVcHRzbEQ2K1J3N3o1Y0FBQUFBQUhEQjFyVDRTd0tmYXUyM0V6YmErd0FBWEt3MTdaeE1mbkxlZ1Z3Q0t2a0FBTEN6UFhrN2lJaHlUZCtJaUZkSmVuT2xtT2J0UlhuYlU2ckNzMWt6R0FBQTBIbWxiMlhVMmg5SVdzK1RNbjVjMG0ycVJMWjQ3bTc3SzVVS0g2elhEZ1lBQUFBQTBDMXJrajU1M25mVjVmeVlyTTYwWjRmM0FnQndzWHA1VzY0elZ1cU1YV1JVOGdFQVlHZnQ1Vy9IdGc4b1hkZEhFZkZsbFdLYXR5Zmw3WWJ0Sy9OMnI1bzJEd0FBd0xTVnlZb0Qyd2VWK2kwMkl1S0UwdVNNbzVKdVZTdTRCZk42MjUraDFFWmpPV0FBQUFBQXdOU3NhWGxtbkpWa3dHTGpiRzhFbHN4QU93L0l0U3Q5aGM1TWhJMGRIdWZTTzh2L0Uvbi9PbGZTVTIrSGY1OUJSQ3k3OGNTMmZaMmgwaXdBQU10dEtFbDV3TGxjMThkNVNick9zLzJJdk51WHBJZzRwYWJOQXdBQU1HMWxzdUl3SW83czlGcEVuTXB0c2JmUE5iTEY5TDVjSlhGck9lQThhV05ycTlTT1c0bTJLd0FBQUFCZ09oWjlLV0JnRlF5VkJ1UWlkL0wwVzhlTHlTVFlrTFM3ZGJ4ZE1YUFFlclE3aWpaYlgxdmVWNUtBaDJvR1J5ZVRFa3Z5NE82SmY0OUJSQUFBQUN3VjIxZEx1bWZ0T09iZzVaTDZPUWxTdG5kWGpnY0FBS3d3MjRlVXF4Tkh4SU1rUGFkMlRBdmdTYmIzbDJxQXVXcmkxbGJibDFjR0FBQUFBT0M4U0FJRUtySzlyelc3MDdtVHB5VGpsYVRBYUQzZlozdWZVZ2ZRYUNKcFVQbjRzUFhReEd0ak5RbURJNldLbW12YW5qQllraEtMY1g1djZYaUsvSCsyS3hVQ0FBQUFDeThpYm9xSXY1ZjBDN1ZqbWJIcmJHL2RKMFRFTFRXREFRQUFxeTBpRHVjRXdCTzJyNVgwazVLK3BuWmNsYjFZMHFGY0RYQmQyL3Q0eXlUdGM2M2NBZ0FBQUFEQU5pUUJBaFZGeFBIVzdFNnBTYTRMU2J2emE4N0gxdkw3aitmM3JyZVNCbnRxbHZSdFYrc3JzMFZEMG5vcmFUQ1UvdjVES2NsdjJIcnZUbFVFMjhzTmx3VEN5U1JEQUFBQVlORU5sQ3JrL2VmYWdjekJ2ZklFb3A2YXlUd0FBQUR6MXJlOXYxWHA3b2FJT0JFUnI1TjAyN3FoVmZmQjFuNjdyVlltYVk4RUFBQUFBTUFGSWdrUXFLK2R1SGRLVFVMZVdFM3lYWHVwM2pJRGRDTnYyeFg4U3JXK1hoN3dLOHY5V3RKR0syblFhZ1lEQjdZUHRLb09saXFDN1lIQ3llV0llNjBLaGdBQUFNQ3lHQ3BWMUQ0bzZmYTFnNW14WDR5STQ3YXZyQjBJQUFCWWFhT0lPSlpYT0RtZzFDY3BhYXRhOFVQcWhWYWY3VjlVNnVjdEU2NTdhdnBrZXp0K0VRQUFBQUFBT3lBSkVLZ3ZKTzFXVTUydjZObSt0Wm9Fdko3dEw3WDlLdHVuM2RpY2VHN2JweVVkczMyTHoyNll0MzhwNmVtUzd0NzYvNk8xN0xEVUxEOVJscUxZbktoZ0NBQUFBQ3lOaURnU0VUZEplbmZ0V0dibzd0TFc0SHFaQUFRQUFEQlh0dmRMV3l1aUhGV2ErRHpJTDI5RXhKOUt1bE9sOEJiQk45cSthOTVmbHpUTy9iS3l2YWRlV0FBQUFBQ0FaVU1TSUZEZmFXMnY0TGZYOWtIYjEwcjY1WGJTbnFUZmtmUVlUWGNXNkQwbC9hQ2tkN1dTQ1k5Sit1N1cvMU9XbnlnVkNSbEFCQUFBd0RKYVY2dmFkVVI4UWMxZ1pzMzJnNVRhOGdBQUFGVkV4REdwU1FiTSs3dnpibG5GWkJ3Uk1mbTFLK1Q5dGc4cHIveFNmbVpNd2dZQUFBQUFYQXlTQUlHNkJzcURjcmF2dGYyVGttNldkRmpTaHlROXNsSmNWMG42aVZaUzRFZHQvMGVsYW9BbFhwWURCZ0FBd0xMWlVKclFNbWc5ZjJHOWNHYnVCMXI3cXp5d0RnQUE2dXBGeFBHOEg2M2t0ZzFKNnhGeFEzN2h5aXJSMWRlVDlEQ2x2dGVlSk9Xa1FBQUFBQUFBTGhoSmdNRGxLWU9IL2JKTVE3YlRBTnRnNHZXZXBLSHRGOW0ycEk5SitwN1poSG5aN2lEcE4yeC9PaWNGUGpaMzFvWFM5MVcrMzdKc2NGR1dEeTZ2OTVWbitKSkVDQUFBZ0VvR2FpcGJSMFE4cldJc3MvYlZ1ZDA5RnRXOEFRQkFQZTIyeUdTYlpDTnYrMHJMQTYvcW1NV3ZLaTBGdkVkS3l5ZFhqZ2NBQUFBQXNHUlc5WVlhbUphaFVwTGJxZHd4MDh0TFcreVdKTnNIMUNUL0RaVVQ1R3ovaDFKbFQ5SjN6VC9zeS9hck9SbndkMjFmcDZhYXlsalNLUDhNUXVsN0hraXk3V3Z5NjJXR0w4dFpBQUFBWU41Q2FTSk9hWmRmbFk5OVNkV29abXROWWhJT0FBQllXR1ZKNEpIdHZiYXZYTldsZ1czL2JhdlBkRWo3RFFBQUFBQndNVWdDQkM1UFNYd3JTWENEaURnbWFTU3BIeEZIYlc5VkFMVDk3Sno0OTlvcTBVN2ZsMG42UUU0SWZHZzVtSDhHVmhwUTNiQzlQeUp1VkpyTmVwMmFHYjRBQUFEQVBKWEtLaWVVMnU3SEpUa2kvcUJ1V0RQMTFaSVVFYWNxeHdFQUFMQ1REVWxoZTE5RW5JaUlVN1lQcm1naTROMXQzelZQTEtmOUJnQUFBQUM0S0NRQkFwZG5tTGVsNmwwN3VXMlV0MWZhL29PYy9QZU1lUVkzWjIvS3lZQmZsNStIcE4yMjkrYWt3SFF3NHZxOHUzN0d2d0FBQUFETVZydTlmcnJzNUtyVlh6VDNhT2JqZVhrN1BPZTdBQUFBNmxoWG1wUnhpOUlxS3NPSXVGbXBiL0dCVlNPcjQ0TVJjY3oyUHRGK0F3QUFBQUJjQkpJQWdjc1QrYkgxdDJSN1grNmtrZTFuU2ZxNHBJZlhDYStLWDh2SmdGOG9hZFJlOXRmMkhmUHVRTkxKS3RFQkFBQmc1ZVhxS21OSlBVbTlpTGd4SXQ1U09heFp1YjNTOXdrQUFMQ0locEprKzVEeWtzRDUyRnBFdkVQU2cyc0dWNFB0cCtlSzFRQUFBQUFBWERDU0FJSExZOXUzVmhwQWxPMUR1WVBtSzNQbHYyZlhESzZ5UDg3SmdOZm01eEVSSDVXa3ZFU3k2NFVHQUFDQVZSWVJSMXRQUzRKY1NQcmVDdUhNdzFocElnNEFBTUNpMlpTa2lMZ3BMd044SWljQzdzclAvMHpTL2V1R09IZlByUjBBQUFBQUFHRDVrQVFJWEo3QnhBRGliWEx5MzZ0ckJiU0FQbWI3ejlVay9RMlVPL2NBQUFDQU9ldXBTWVliS0NYSGpYTGxHVWZFaTZwRk5rTzJ2MXhVQXdRQUFBc29UN0NXSkVYRWtid2RLUzBMWEo3L3BhU24xSW13RHR0dlZacWtBZ0FBQUFEQUJTRUpFTGc4UTBrOTIzdHQvN3FrOTlVT2FFSGRQMWNGZklSU0I5NEpTZXUxZ3dJQUFNREtHVXNhS1NYRURXM3ZrNlNJT054Ni9kMlZZcHVsWjB2YXFCMEVBQURBcER6Qk9wVDZDa3ZTMjBocHdrWS9QKzlIeElzbC9kcjhJNnptSWJZL28zWVFBQUFBQUlEbFFSSWdjRzQ5U2NwTFVCU2xVMHEyOStYWnFqZExlc3o4dzFzNnYyLzd3M20vREVJT0pNbjIvdnk4SkFmMkJRQUFBRXlmbFpMOUZCSEhKMTRiU0hyRTNDT2F2YzhYN1dzQUFMQzRyTlJYNk5heG9WSXlvQ1R0a3FTSWVKeWt3MW9kSDFKVHpibFVzNmE2TXdBQUFBQmdSeVFCQXVjMnRuMG9JbTZScExKTW1PMWQrZlZIYUxVNm5xYmhNM0pWd0hzb1YyQ1JwSWc0bGhNQk55VEpOb09VQUFBQW1MZGhya2JUUmFQenZ3VUFBR0RoREpUNkM5Y2xLU0p1V3plYytiSzl4L1puSzY5STAzcElKQVFDQUFBQUFGcElBZ1RPclorWEJ1dTM5aFVSeDIwZmx2UmJWYU5iYnUrMS9WaEpzbjJkN1lNUmNVeDVWbXRlTWhnQUFBQ1l0NTZrbjZnZHhBeXNuLzh0QUFBQUMyZVl0K055SUNKMm5lVzlYWFJ6Ukx4ZnFZMDZWbHFsWm56dUx3RUFBQUFBckNLU0FJRnpHeWtObHAyV05MSzkzL2FEYkZ2U3dicWhkY0tyYmI4eklxNlBpQ1A1V09uWUc1enRpd0FBQUlBWjJoVVJQMVk3aUdtei9VVzFZd0FBQUxnVXR2Y3FWelhPL2JON0pkMnZibFR6WS90K2VRV1ZTVlFDQkFBQUFBQnNJUWtRT0xkUVdtNWluRHVYK3BMZVZqZWt6dm04bkZSWk92SDI1ZVBEYzN3TkFBQUFNQ3REZGJPNnl0ZlhEZ0FBQU9CaTJkNmJWd3h4UG5SVlJCeUxpTCtTOU5LS29jM1RYMFRFVWFYSjZrT2xQbW9BQUFBQUFMWWhDUkE0Qjl0WEtzMm9YSmYwZUVtZnFCdFJkK1ZFd0dzaTRuZytSQ1ZBQUFBQTFGQ1d6ZjNacWxGTTMrTnJCd0FBQUhDeEl1S0U3UU90NXplVVNjUVI4WjFha1luRXRyOWNhYks2SkpYbGtFZVZ3Z0VBQUFBQUxDQ1NBSUZ6eUxOTXg3WWZLZWxsdGVOWkFlK3pmWjFTNHVWS2RPQUJBQUJnc2JRR2xYKzRkaXdBQUFDUWNoVzhRVjZwUlJFeFZPby9IRWZFZ1hOK2NYZjhibXYvWkxVb0FBQUFBQUFMaXlSQTREeHNQMDNTYjlTT1k0Vjh4UGJkYWdjQkFBQ0FsZFNMaUpza2hlMHJhZ2NEQUFBQVJkNDZWd1hjcnpSNWVKeVBuNVIwK3lxUnpabnQrK1ZFU0N2OVhPSThYd0lBQUFBQVdDRWtBUUtTY3VlUkpQV1ZacEZLYVhicHQwaDZRWjJvVnRyN2JOODU3N2QvSnozYjExYUtDUUFBQU4xWDJwMzlpTGhaMHZ0cUJqTURaYW5qbnJZUEhJZWtRWldJQUFBQXpzMTVPNUtraURnMjhmcnVpTGhSMHEvTU5hbzYvaUt2WENPbG44dnVtc0ZnYWZTVTJ2bzdKWTJHbW51Z29qOXhiQ0ExWXlpbEltZCszK1MvTlptY0d2bDlPNzMzYkRIMFdzOUxMRHNsdlpidmEvSjV0SjVQZm0vbGZtanllK3psWTJkTHJHM2ZONVYvbHlUY3hWYytIKzNQazlSOERoWmQrZnRabXppMnpNYm5mOHZxS1N0U1pNdlNOek41WGk5eEw5dG5kUEw2c2lqbmgzVTE1NjZZMkovODJTK2pzMzBQWjJ1dkFCZWwxVjZWem16emRjRmtXM1NnMXZXREpFQkFUZWRSUGlGc1NscTMvUmhKdjFBMXNOWDJJZHYzVmpxQmpYTWplRE1pYmxCcS9IU2hrUU1BQUlERk1zcmJudExBNm5NcnhqSjF0dStUZHpmVkRLZ1hJd0VBQUN5ZmthUkJSSHhqN1VEbXdmWWoxQXdNMDM3RE9lVSs5YkZTOWN4U1FiSWtzZlh6c1UxdFQ0QWJxVW5VMmVxRGo0aVRlWHRMNjMxdGEvbmZzNXBCU09mM2pTYis3MjFoYW50aTBMajF2QjNMNUhqbXJ2eDl0Yjl1cE9ZK1o5ejYvOHIvdWRIK2QvTjRVSy8xdFd0S2YxL3IycDdRVWhKdVM2eGpuWGsvaGNYVC9peTBCOG8zdEJ6alMrWHZaOXg2UHZuM3NteDJTZ3BlU2ZuOEhKSVVFY2ZWSkhjTnovVjFDMlNrZEo0czU5Z1N0MjBmckJiVmhTdXh1L1ZjU3VlSFJVZ1MydEQydi8yeDdhdlZuQmVXM1VoU3YvMTNrSlgyQ25CWmNnWDVRMHJuMWZaMWM3TlNTTk5XMnUvbGZEVlU2L3F4cTBaRXdLS3dmU0FpanBadFJCek54NzlPMGk5VkRnL1NYOXUrZlo3TnUwdXA4WGh0VGdRRUFBQUFaaUdVbHBYclI4U3JiUDl5N1lDbTZCR1MzcWt6Qnczb1lBTUFBTXVzRElqZVRkSUhLOGN5YTc4dktxVGdBa1ZFTzVta1ZNbzdxZTJKUk9YdnB5U2dqRnZ2YnljYWpGcXZEL0oyYVB0Z1JCeFJuc2lmazFtR09jR3Vud3N3bEtTNTluMUkyTDZ5VmQyeUpOdWRVa3JHRzlqZW5mODlTMDAxd3Z3MXcveHZYS1ZVUE9CRWZ0KzZtc1RIRW4vNys0cjg3NDliLzNjeFZwTW9XTjdiVHJqb0s0MVRqQ1dkMW5Jblk2MkNrYlovSGs1cGU5TG5JaVQ2bk10QXJjOWovdnM2cmNXUCsxeEdVaXJJVWhLTFYxVSt0MG5wOXp4VU92L3RVdlBaWE9qelMrdDhMMjJ2VXJlV3J3bUwvamtkcW9seE1yR3VuT2VyeVg4anA5U0tyZVF3S0gxbVR0ZUtiVXJHa3BSWFlXa25ZbHJwNTc5eGxxOER6c3YyL29nNGx0dWc3Yi90ZFMxT291OGxzMzNyaVBoWE5VbC9XMjNiOGg2U0FMSFMyZ21BNVpEdEx4UUpnSXZrNDVKMjVkL1JnQVJBQUFBQXpGRGY5aFd0V2RoZDh3aEpQNm50bFFCREpBRUNBSURsMVZkVERmQkR0cDhqNlVjcXh6UlR0dThkRVgrcjVhb1loRHJLNTZOVStwdXNzRE9aYU5JZUtDM0pmcjNXOC9MdmJRM081MlNQUWQ0LzNqbyttV0FuTmNrdTI5NWoreDZTSGl6cExrcUpEU2Z5Lzllei9hNkllSnVrNFE3TGdXLzdQL1AzT0prNDBNL0pGRWVWenhjNStmQjQ2MnRLcGIrU2NGR090YXNTU2sxVlF5eVBrckFwTlltbzZ6bkI5SXpQMDRMWnlNbTBheEZ4Zk9LenZwVHkzK0tKbkFDNDBFbHVjMUNTaXNzNWNhUW1VWFhodFQ2UDdhU2FzZTA5K2R5K0RML2ZnZTFkT1JGdFRVM2liZlcyMWNRMWRLRHRWVUhiVlcrWFZmbWUybjJUNWVkK3FrcEU2SXg4ZlEvbGU4VGMxMy9NOW5wRXRLdHNMcVhjOXBhYXhObjIrV0ZkMGdaSmdGaDVyZkwxc3YyNWt2NjRYalRZaWUzVEVkRnVBSlJ5NGR4d0F3QUFZSnBHRVZIdWs0ZHFsZ1BwaWdlb3FmSlJMSHZISVFBQVdHMGoyOWZrbFVRVUVjKzAzZWtrUUVudjF2WWw3SUJ6S1ZYdzJwWHd5bExBNWQ2Z0pNR1YvdmJJVlo2T3FVbnMyRGRSV1hCZEtVbnB5eVhkVnRJOUpIMnpwS2t2QTJsZjlFZTkzTXU5VXRMN0pmMkxwRmVWWk1DSjc2TmRBYXFuWnNKVWUreWhKT3VVS29wYnlVd1hHeGptcWl4UkdwTFVxbHE1a1lhYkZuN2lueU5pcERNTCtpeHRYMFgrbXluSis0dis4NSsxZGxMeFZyWFNYT0hweUZtL2FvSGs2OExOZVg5dlRsWTlvU2JCYTVGWjZWeFFKc2FPbGE1cDVYdGFoRFpXK1ZzcFZRdkhwY0tabHYvdnA1eWJ5MlNEOWtTRGJSWE5nRXNRK1pwL1dHa1N5VkRhU3A0cmJiMmxsWmZSN2l0OWJ6dE9oaUVKRUN1dFZRV3dYT1Qvb25KSU9BdmJ2eGNSWDYxMG8xMldIZ0FBQUFDbXJYUkVPZTkvU0traVJSZVV3VDA2MUFBQVFGZjBJdUpHMndlVUpuU2NrSFEvU1g5Wk9hNVpXcHRZaGc4NGw4bHFkdEwyS2tlVHk5MkdjdFc5WElYc1FaSStWOUozMkw3RHJJT2RrcElnOWFSeXdQYi96dHYyKzRhUzNpanBGeVBpOTlYOFhIcVNkdGtlNUwremtxelR5NDlUSkFBdXZsS1JyQ3c3SFJHZnpNZExFczBpSlBtY1MxbVN1eXlodXk4aVBxMGxUUUFzYkYraHRGVDRTdjhOdFpaN1BXMTc2K2VScTFRdC9ITEFVbE1Oc1BVM1ZWU3ZwSGMrclVSdXQ1TzZGNmh0MVZOVEVXOWQrV2VhcjgxZGFRT1dmdGRpV2FxMFl2RTVKd0NXU3FVRDI3ZUxpSStxcWZpNXRIYjRHK25uNjhoV2xkMjErWWNGTEk2eURMRHRmYjZFNldTWXF5K3gvZFZxemx1TFBvc0VBQUFBeTZzOTRlU2wxYUtZUGU2QkFBREFzaHNyTFFWOGk2UXJKQ2tpL2tyU3IxU05hdlorczNZQVdCcGpOZFYyeW1TbnZ1MnI4K3M5cFlIM2U5aitJZHMzTzVOMHM2UTNTWHFlcEdWSkFMd1lBMGxmSStuMXRqL3R4aTIyWHlicDNyYXZhYjEvVTgyU3dWaHdFYkdadHllVUVnSEc2V21jTEc5WjhNZW0wbWQwUFg4ZkpTRjFhU3NZMlQ0VUViZmszMG50bjIvVlIvNFpESlVtTTV5d3ZUY25YbS9ZUG5TWlArcDU2dWVFbEpLY3VxNG1vWHhoSC9sbnZrL3BTYWxRdVQ3bG44M2xLc3ZUajVXcUFGNHRTYm1xV2ZXZjRSUWVVbXAvbE0vN1JrNTBCaTVYVDVKc2w1eVNZVVI4TkU4YTIxRDl6LzVsUGNxNUszK1ArMXFKNU9QeXZWTUpFS3V1ektiNGp0cUI0SUs4MnZaZlJNUUg4M051dGdFQUFEQk5BMG1uMVZwcUl5S2ViL3VuNm9ZMWRVczdhQUFBQURBaGxOcHRHM25aeEhRdzRnbTJIMTh2ckpuN0VpMUpwU0JVVlpZU0xQM29aU25iejVIMEdOcy9VQ3V3QlRkUXFpTDRKR2xiOWNEL0lla2xFZkgzbGVMQ3hkbVFKTnRQay9TQ3VxRWcrd1QxV003cnlvaTRxWFlRRjZLMXhMWnNMMlh5bHUyM1I4UVhxN1YwdUpwclowMGxtV2NzYVdqN1N5VzlxYXQvUDdaL0xTSytTZW04VGZzV2wyc3NiU1g0S2lmL1hTWHBJMTM1RzdMOUY1SWUxYnBlbFBNV2xRQ3hHdkxNaVdnZEtoMUQ1ZlY3U0hydXZPUENKZnVBVW5ubUsvUHp2dTM5RSs5WnROa2FBQUFBV0E1RE5SMU5KVkd1YXgxUFBUV0RnSlAzU1FBQUFNdkdhcFowMmhydnlQMkY5Nm9TMFp6WWZsYmViZmVGRHM2eWo4WFVya0ErbUhoZUtpbEpxUTNmM2wrZmVGOFo3eGhvKys5OVpIdS83VWZhL3UxV2hiOTNTU0lCOE9KOWw2VDN0aW9HdnRuMkk4dUxFMk5SazcvYlh1dDVlVzN5SG14OTRuMjRmQ0ZwY3Z3SVdHUW56LytXeFZBU0FMWGMvVW1mcnliaHJ5eE5lK29zNzUycjFqaTRJdUwzYXNZeUI0L04zMjlmcWVyaGdmSkNLd2RnWFJNNUhzRFp0SE5IY3NYNGo5U0xaaVllbnhNQVM0WEFiWW5MSkFGaUZmU1Vrc2IycXJrQkh1Y3k3bU5KNzYwV0dTNko3VC9QcFpvUFNocmxNdWhTYSthdnR0OWtBd0FBQUJjaVd0dHVUQTA4MDFocDZZQzlhcFlXa2JyNy9RSUFnRzVyRHp4dlZUdk8vWVUzS2kxbjJsWC9OVzgzV3NkR2FnWkhoOEtpYXljYURKVitmNlZmZXlScGQ5NGZxeG5QRzZ0WnlxeThyLzF2REcxL1lVbjZrL1FwU1crUTlFaGgyaDRtNlEydDVNb2Z0djF2OG10bisxc3NTenRLZVdsbU5iL3pqZkphSHZzQUFLeWdYR1h4dUxZbmh5L1RNdEdYNGhOS2t4ZjJSY1JSS1NWeWxlV204OUt1VnZjbWEyUEs4bWZvV0VrRXRQM0I4MzNOa3ZuNWlQaEhwWFBEYmpWOStsc1RnMGdDUktlMS9zZ1A1cEtmUStVYnFvaTQwZmE3NjBhSVMzUi8yMDlvelRJcGc1ZHJhaTcrTkFJQUFBQndzZFltdHNzOG0vbGNIQkZsa0h4UDFVZ0FBQUF1eis2SjUxc1RIUElBNGhmT09aNjVhbFVoNnlsTmdHZGl4M0t4bXQ5ZE1WSWE3TjZ2SnNGdnNwSmNLSTF6bElxQTQxenQ3MmhPUm51THBLK1phZVRZeVRNa2ZTem5CUDZaN1d2Vi9JN0svWmZ6Zmp1SnMvMTdYcGUyVmRnQ0FLeVkxakxMdTlRc2Jib2g2Y2sxNDVvMTJ4OXJGZjdwNXdSQUtiWHJUNGdxZ0xnQUVYSGM5dDZjSS9RRVNYZW9IZE1ValNQaU85UXNtOTJlZENLeEhEQldRY21TenhmTGNpTTl0SDNBOXIwbDNhZGFjTGhjcjg3YmRUVWRYTzNPRXBJQUFRQUFjS25LelhQbnFrdmJ2bXZlTGRVb1RxdTd5WTRBQUtEN0p2c0FkNnZWdG9tSXYxYXFndFpWNVh2YlZKTUFPQmJ0dTJWUkJ2Q0drbnEyOXluZGd3enp3SGRKSUJ2bTk1WCtiOXZlYmZ0eHJTcDBiNUIwNi9tR2ozTjRvS1NQMkw3RjlxL2IvcHlKMTlzSnU2Vnl5MUROS2tja09nREFhbHVmV0Fsdkl5SmVLZWxmS3NZMGE5ZmEvaDVKc2wwbUxmZVVrK1h6a3NHMGNYRmVFWEhLOWgzVjVKTjBRa1NzUzFKZThWVGF2a1QyS0Q4bkNSQXJvWFFFOVd6dnphVmpqMHI2NjVwQjRmTFovazJsbStKeXczeGEzQndEQUFEZzBtM3VjQ3drdlgzZWdjelFWNnRaZ2lxMGZma3dBQUNBWlRQWmZqdWxadFdRdnFTMWlQakt1VWMxUjdhdlZ2cWV0d1orTWdaSkYxOVBUWC8yT0NKdWxoUzI5eW9sQUxhWGV0NVVLbkJ3UDl1ZlVGcnErbi9QTlZwY3FzZEllbmZPMTN5Ujdkdms0KzFCMi9hNTdKUW9jZ0FBcTJ5Z05PWXRwV3ZGSGlrbC9rVEUxZFdpbW8vbjI3NW5hekxFV09sbkVLMmtTT0JjMXBVbVZseGZPNUFwdTc5eVAzNUUzQ0JKdHE5U3EyOC9QeWNKRUozWFY3b3h2cU5TaHZ5SlhQcnptYlVEdzFROE9sY3lLU2UzVVd0bUFKMWNBQUFBdUZobHdQaFVmajdLeC82cVdrVFRkMmMxazJoMlQyd0JBQUNXVWVTSDFiUnpyRFJvV0JKcG5sY2hybm41L3JLVEs2UmdlWlNsZi9mbDUxYXFBbmhDVFVXNGRkdjNzUDNidWVMZlgwZzZWQ2RjVE1GM1NUcWNFd0wvblpwcWoyVzhOdklBYnVlcTBnTUFMdGhRelRLZlkwa25iUitJaUJ1VjJyejNyQm5jSFB4ZDNwYkpFR1ZGUUdsN0pWMWdKeHUyMzFvN2lDbDdWa1Q4NWVUQmlCaEtVcm1YaUloYkpKSUEwWDBqcFhLNUg4dlBRK2xDOFJQMVFzS1V2VHZQakpUVW5OeEVJd0FBQUFDWHBxOHpPNVkrVVNtV1dUalMybTlYQVdRU0RRQUFXRWJuNmdNY1MxSmVHZWFINXhSUERkOVhsb1NLaUZPdDQvU1BMb2VOWE5tbXJ6UjJFVXFyR2gydy9VVzJiNUgwWHFXSzN1aVd0K2ZsZ3A5bHV5UjJPbGVFcEdJN0FLeXU5cXAzb1hSdE9Kckh3eDBSZnkvcFdYVkNtNCs4R21DWjZITTZIOXQ3emk4Q0pObitOa2tQcVIzSE5FWEVjL0p1ei9ZQk5aTkZodVV0YWxiK0lRa1FuZGVUZEZKTlJRL2Jma3Zka0RCbGV5WGRXODB5Q2JhOXYzSk1BQUFBV0Y2bG82MnJsUmMrcWFidExLWHZzeXliQndBQXNJemFGUUI3U3UyYjBxYnJ0WllUZTJDRjJPYmxNL08yREFReDlyTWNCbVhIZGwvNTkyZjcxeVQ5cTZRM1ZZb0w4L1ZzU1RmYWZtdXU1T0pXZFVnQXdPb1o1MzY3VXRFNmJPL05sWUpsZTE5RS9IaTk4T2JpMGJhL1VFMk9oOHIzRDV6SFMyb0hNRTBSTVZDekxQWTRJbzZxV2NVbzFOenZPcitIRzBGMDNpNmRXY1hqOHl2Rmd0bDVtNlMxaURncFNYbmIxVUZiQUFBQXpOYkp2TjJxdk5DeGpyVjlTck9HVHlvTk9vNUUyeGtBQUhUSFdLbDlNMjQ5bCszZEVmSG4xYUthdmQvTjI1SlUxanZiR3pFelpSV2l5UXJiUFczL2ZaUzI5NkQ5UENKTzJINkg3VTFKajU1bG9GaFlENUYwelBaaFNRY2xLVmQ3a2RMbnFqOXhySjN3TERWTEM1ZlhBQUJMcXBYd1pxVit2Qk90MTQ3bjdhNGFzYzNSSCtka3lIYTFNMEJxdFhsYTFaUUh0cnMyeWYyK3JmMnhtdnVIZHY3VGVPSTlKQUdpODRiNTRsQnVqdjZoY2p5WUVkdWZxM1J5UDZqVTBVZTVmQUFBQU9CTTErWnRHU0NYR0NRR0FBRGRGWklpVjBjWVMvcUd5dkhNeWg2bFFhRXlTTXBFai9uWVNzeFNHb1FiMnI2eXZWeGRYclZtTEttZmo1ZmZ6VEMvLzRBelVjQUF5VUZKSDhxZmlkUDVNMVFxSWZWYVMwS09sS3BGSGN6UE4vTFhyNHZ4RVFEb3VuNitQankwZGlBejluRnRUM3lpRDNQRlRiWjVJdUp3UHY3U2VsSE54SzlFeEh0c1g1R2Z0Ky8xem9ra1FIUmVua0YzaGRLTjlkMXF4NE9aZVplazB4RnhSTnRudkFFQUFBQm9mTEdhS2lWbDF1RDQ3RzhIQUFCWWFuMjFCZ3dqNGxWMXc1a2QyLzhwNzVhQlVwS0FaczlLUCtlZW1xWHFib21JVy9McmtaZnNHa2dhNVNvK0Ewa2oyNStkazd4dXJCQTNsc2N4U2E5Uitud05sWkwrcnNtZnBYVkovWWc0a3NmQlN2THBoaGdqQVlET0tvbmdFWEVzSXQ0cTZSZHF4elJEVjlsK2xOS1N5QWVWVm9IRUNtc3ZpNjJjREdqN0VaS2VYRE91YVl1SUorVGR3VG5mdUFPU0FORnA1YVluSW02Mi9ZZTE0OEZzMmI2TnBKNXRHZ0FBQUFEQXp1NGlwU1h4V3NkT1Y0b0ZBQUJnMWtxMWhJRzAxVi9jMVlvcEw1RzIybmxVU1ptdlhoNklsUEt5ZmRxK1pOM1E5cld0L2IrVDlMNTVCb2lsOWtqYm03YWZKVWtSOFFtbEpMK1RTZ21sZTVVcTRaeFErdHl0cTZtUUF3RG9tSno0ZmJYU3BONTFTZDlmT2FSWit3M2JkOHVGZ0M2b0VobzZiNUNYeGU3bk52YnYxdzVveXU2dTlMYzl5Sjk3S1gzMkx5Z2hrQ1JBZEZwRW5NeTdleVE5dUdZc21JdVBTeHBIQklPWUFBQUF3Tm01VloxRWFsVXVBUUFBNktDQmNrSk1SR3ptaWltZFpIdC9UZ1FhaS9iZFBKU2xnRWQ1eWVsaW9EUW1zVFh4SmlKdXNQMmJ1ZnJmUGVjWUk3cmoyWG5sNk05Uk9xZXRTVnNWY1RhVVBuZTdsUkpOOTUzOW53RUFMTGxlUk55azNNYk55VkIzcUJ6VHJIMUFxZDNWUDk4YjBYbFIyamw1SXNTSEs4Y3piVDhRRWU5WGF0djFsQ1lYRGZJK3l3RUR5c3RhMmY3ZTJvRmdyaWgzRHdBQUFKeGJXUXE0SitsVTZ6a0FBRUJuNUlHaG9ab0J3dzJsNUxpZnFCYlViUDJnbXVRL3huOW1iNlNKZnVqV1oyNURxVXJiUHRzL2tKUC9IbDBoUm5UUFgrYlBVN0Z1ZTcvUzUyNGthVE1uaEFBQXVtbXNkTzV2ci9KeHN6cmV6ckQ5RHFYckhGYWJJK0p3M24rMFdwTnVPdURqRWZFemFpcitsY0pYdzl6V3V5RGNCS0xyUXFtRHA2dWRPcGhnKzgvejdzbHp2aEVBQUFCWVhhVWpvUXdRa3dBSUFBQzZxaWRKdHE5UTAxZnNpUGh2VmFPYW5XZll2aXJ2ajZ0R3NpSnNyN1gyOSthcWJMSjl0ZTB2a0hSTTBrL1ZpZy9kWmZ1MDdXOVZTampkM1RwK2ExRXBDUUM2TEpRcUFKNndmWTBrUmNTeGlIaURwTGZVRFcybTdtdjdFYldEUUhYbC91NDZTUytySE10VVJjUm50Q1oyOUNTTlc5V2RMM2dsVEpJQTBYVzJmWFh0SURCWDk4K3pMUUVBQUFDY2FhZ202WS9rUHdBQTBHa1JjY3oySFhOVnJIYmJaeVRwRHl1Rk5WT3RDbUFrQWMxQlJKd3hHVDBQM2oxVDBwL01QeUtzbUpmWmRrUWNrVkx5YVVRY0ZaV1NBS0RMU3VKM0x5SnViQ1VKRFNQaWkyc0ZOU2UvWHpzQVZMZVp0eCtwR2NRTTNGM1NLQ0tPS1NYNmppV044NzNkb0d3djVCOGlDUkNkWVB2QXhLRytVblpzU0hyNS9DTkNaWityODVkK1pibGdBQUFBN0dSTmVVYWhVcHN4enZIZVpYUllhVUNvM0ROdG52dnRBQUFBeXkwaVB0cDZPbW9kZjNpRmNHYk85cS9uM1ZOVkErbUkxc0M2MU53bnRBZmd4dmw1TDFma3ViT2tUMG42enZsRUNLUnFHTGEvSnlKdU9rZVJoSElQV1BZQkFNdXB0R2ZIMHJZSklGS2E5SEtuZVFjMFQ3WW5KelgzMWZUZmRxMGZkOVcxMnk2eWZUQnR0bGFHN0lxblJNVDdXODhuUCtQRGllMDVrUVNJVG9pSVQwcmJic2hIU2hlK3ZxUXZxUlVYcXZsRnBVNnVYbjcwTlhHUlVDcVJEd0FBQUV6cXFWazZiVVBwcHJ0MzlyY3ZuVEpqdHR3emxlK1BUaklBQUxDS1BsUTdnQmw0VE41Uzlma3kyVDdVSGxpM3ZTZnZEbTBmeWdPUlVocVFHOXQraGJyNW1jSnllTDd0TitjbHFkY2w5U1pXeWlwSkkrdWlVaUFBZEZaRVhLK09UMGF3L2FONXUxZnBtbWFsU1JtMGY1ZmZRTnY3cWNkU3FyUWRFVWRzZjdlaysxZUpiRVlpNHNWS3VTd1hWT252ZkVnQ3hOTExKL2R5UW0vUFhncmI5NjBRRXVxN2k5Sm5ZWndmby96WUZBT2NBQUFBT0xjektxYlkvcHdhZ2N6STMyam5wRVk2eVFBQXdDcDZaTzBBWm9RcVgxTVFFWWVscmVWOUl5ZFg5VzN2allqRGVRbldmazRJdEtRbjFZd1hrUFN3WEJYd2dOSVNjamVwdWY4TFNidVVKcnN4UmdJQUhSWVIvNnQyRERQMlk3WS9NN2ZOU2x1TkhJQnVHRXJhby9TN0hFbVM3VHRHeERIYlh5RHBoVFdEbTdhSUNEVVRORTVQNDk4a0NSQmRzS1o4UW0vTnlpdVYzMzZtVmxDb3kvYjlkanFzbEFpNDlaa0JBQUFBSmxoTlc3RlVrLzUzOWNLWnVsQlRNYnNZbitXOUFBQUFuUllSLzFBN2hsbXcvZVRhTVhSQldWWTFJbzVKMnEwOFFGY0duUE43SGlmcEUzVWlCTTdxWTdsU2puSkNvSlR1ZFVkSzk3bE1BZ09BN2xxWHBJaTRvbllnTS9ZQnBjcHB2WWc0cFdaRkZ5eS9vZTByODM0dlQycVFwRCtwRmRDTTNDWGZiMnprQ3VOVDZhTW5DUkJMTHlKdVZyb0JIMmg3Q2ZPaHBBZFhDUXFMNE1lVkJqaExRbWhoTmN1ZUFRQUFBRzBsK2EvY0s1Y2xjKzlRSjV5WnVMV2E3MHRxa2dHN3RPUXhBQURBeFhoTzdRQm00R1cxQStpQ2lEaVJLOHRJcVEwOVZHNDMyOTVuKzJPU1hsRXJQdUE4WG1qN2h5TGlzTzE5U3ZlN0pSRnd2VzVvQUlBWk9wbTNWbG85cjdOc3Z5TW5pNVYrVHE1dnkyK2dWTTM0aE8ycmxWZDl0UDJheW5GTjIwOUh4SWZ6NUtKZXJqQStsZjU1a2dDeDdNcmE3dTNrdjc2YTJVeFlYUTlYODlrWUtkM2dVdjBQQUFBQTUxSW1pbXhPSFAvTWVRY3lCNVBKZjFRREJBQUFLeWtpZnFKMkRGaGNlZW14cXlYSjloNmw1VlFIa281SnVyWm1iTUFGZUo3dE42aEpBT3dwZlg0M3FrWUZBSmlsc2lMZXFZajRaMGsvWHptZVdicVBwSWZaSHVUblUxbE9GVlVOVzlXNGI1SWsyNThyNmZGVm81cXlpSGg2L2o1N2F2cmxCK2Y0a2d0R0VpQ1dYYnVhMjNEYkMvYjN6VGtXTEpoV21Yc3BmVmJhNXp3cW5RQUFBT0JzSnF0RzM3OUtGTFB4TGpWTEFrc2svd0VBQUF5VkVybzZ4ZmFYMW82aEEvcVNCaEZ4ayswRHVTTEpOOXYrZE8zQWdJdndTRW1mVXFxT05GQWFYTjlYTlNJQXdDeU5iZDlHcVg5ektPa1psZU9adGRkR3hQRzhQenJuTzdFVWNuVzhRWDcwSlAxbDNZaW03aXFsZTR5VEU4ZW5Na21ESkVBc3UzSWk3MDhjRzBoNjd2ekR3WUo1Z08yenpjYWNyTzRDQUFBQWxNUzRtSGgwcHNKSFJMeEIyNnVwbDNZeFZiTUJBTUFxS20yZ2UxV05ZamFlWGp1QURoZ3BKVXp0ajRpanRuOVQwb3RyQndWY0N0dTNTTnF3ZlUwcldRSUEwRDA5U1dYQ3dpQWlqa2s2VkRHZW1iTmRxdDFTQktnRGJPOVhTbUFkMnU1YWRjZEg1eVRIMGpkZkp1aFBiVlZMa2dEUkZidktqdTFEbXFnS2lKWDEwb2k0b1pTTVZUcUpsaktxazlWZEFBQUFnRTAxN2NVMXBUYWpKZTJ1RnRIMHRkdkIvZnc4Sk8ycEV3NEFBRUJWdXlVcEltNm9IY2dNUEx5MVh3YVUxdk9XQWRKc1lqV1o5aEpjWlNBNThwTEFmeXpwMGZPTURaaTJuQ1JoTmVjQ0tWZTh6SzkzT2trRUFGYkVPQ0pPNWYyUlVsdm1pTGEzRFR2SGRydmlZU2tnTlZCcUI2K2YrUldvcUs4ems5N091RCt4L2QxemkyZytmaVVpZmp2dlc5dFg2Q2x0dE10R0VpQ1dYVGxoYnlpZkpDTGlzTzFyNm9XRUJYS3RKRTJVVWkwblR5cWRBQUFBWUpJbG5WWnpFOTdYOXFyalhkQlRjeDlWWmh4YVUxcHVBQUFBWU1tTTFBdzR2YTFtSUxPUUU5eDZhdnBFYWZOTnlCWCt5aVR5b1NUbDhZVnhmcXpseEttSFZnb1JtTFliSjVKZlI4cWYvVHkrdGxja1N3REFzck5TbjJhWjVCd1I4VFoxc0wzYjhoT3RGUUpIcmNKUlcvMmV0Zy9XQ2c3YmpKUitMMnRxSnQ2VWU3SmVub0J6VjBrdnJCVGZURVRFRStieC81QUVpR1hYTHYrNVIwMWkxd01yeElMRjFjNmlMak1mdWphWUN3QUFnT21ZbkhWNGFzZDNMYSt4dHQ5SDlmSWdEKzFqQUFDd2tsb0pZTjlTTlpEWmVKeWE2bmEwOXliWVBtaDdiMTZTUzByakM0T0l1TEgxZXRlV0lBTWs2V08yLzExNVludGZPUmZtdndjU2hnRmd1WTJVMmpWbGpIeE4wakFpdWo2cDRTTlNXazQySjdZZlZGTjFUcmtpSXVwcVY5NHVrMjQyMVh4V3k4cU9INXh6WExOMmplWlVqWjBrUUN5N2NnRUxwWnVTUFVwL1BGOVpNeWdzanRhTXRuSlNMZWM5T204QUFBQ3drL1lFa3JIdEs2dEZNaHM5U2J0YXo4Y1JjWXVhcW9BQUFBQXJKUytYMW91STk5ZU9aUVplck5SdlByQmRrZ0JaQ2ppTGlDTVJjYUpWK1d5M2N0VkUyM2VVZExobWZNQ012VXRLQ1lBUmNieVZERXNWUUFCWWJ1VThQbXdkRzl2ZXI5VHZlZDM4UTVvZjI4Y2o0cGlrZms3NkN6VlZzWmtVVTEvcGc1NjhKOWxVVHRhMC9hZHpqV2oybmhJUk40a2tRT0NDN1ZGejRoNHFaUVovWTcxd3NHQWVvTzBEbmVYa090NzU3UUFBQUZoeHBaMVlPb1VlVkN1UUdka2w2V1RlTDIxanE2bXFEZ0FBc0dvMjFBdzYvV3psV0dibGRFNTJsTFpYMmxoMWZhWGw4VGFWUGdjanBlWGpQbFBTOVZVakErYkF0aVBpZUd0NXhGQzZYeVFSRUFDV1Y2bm1Ha29yZ095VHRpYStSRTVHK3FwYXdjM0JWYmEvUTJkT2VDWUJjREdVdko1MlFseDdJczYzU2JyL3ZJT2FvUTlLZW9YUzMrTmNKdUdUQklndUdHcjdTWUl5NVdqN0dwMlpWYzFzVndBQUFPd2tKdmJIa3A1VUtaWlpHQ3ZkUDVYT2xqSlJabUQ3cWpvaEFRQUFWRlhhZjFhcUZ2S0ROWU9aQmR1SDFMUURwYVl0eUNTUTFCNjJwSTJ5WEp6dHF5VjlvRzVZd1B6a1JNQWpTc2tSYTBwL0V5UUtBOEJ5NnltZDA4dFNxMUxLb2JCU0l0SWZTWHB2bmREbTRzVzJQenZ2OS9KakpGWkNXU1JsZ3RLNjh1L0Y5Z01sdmFSYVJETVFFWitacXkzN3ZHK2VFcElBMFFWanBSTjNYOXVYdFFJazZYRktGNDV5WXVYaURnQUFnTE94bWdranAvUDJpWlZpbVlWM0tOMDNUWDZQdzRnNFhpY2tBQUNBcW5ibmJTaTFqYnFZK1BJRHRRTllZQnZLVldGeUV0UkkwbzFWSXdJcXNQMHhwYy8vT0MrRlBUelBsd0FBRmxlWjZMRXBTVGtCcVNUQ2xkZldJdUplRldLYnAvZmw3VW5iVjBwU1hoSVpkWldLakNWMzQ3UWsyYjZmcExkVmlXaDJidFhhWDllY0ptR1JCSWhsVjBxU2w4enRvZTI5RmVQQjRpbWZoN0VtR2owQUFBREFEa3FDWEJmYmpIK29NeWZGOUNRTktzUUNBQUN3Q0VyYmFMZFM4c3MrU2UrcUdNOHMvQmVsd2JZeUdZU2wwQnJ0WmJsNnR1ZFdvUU5ZTU5mYS9sUGJWMGZFUjhWeXdBQ3d6RW9Gd1BaRTRGNCtaa21EdkJUOGZrbDNyeFBpZk5qK0hhV0V4K08ycjQySVk3Vmp3bFlGd0poNC9uMFZZcG1seCtVbHVKWHpsMG9senBrakNSRExia1BOQ1NJa0tTSnVxUmNPRmxIdXZDc05HK1V0eTEwQUFBQmdKOXVXaEtzWnlBejhXdTdnYTFlNGFTOE5Cd0FBc0dwSzIyOGtxWmVySS8rSGl2SE13bDdsU2ZTNUNzcElhUkxJS2lTOGJTVXlUUlFQS05Wd1NpWElkZHVuQmF5MkIwdDZWTjQvS1dtUXgxWWtiWTJ6cUgwTUFMQ1FTci9mc0xYZm5oUTh0TDAvSW81RnhQc2wvZlJjbzV1dlIrVmxnZnNSY1lNbThrclVKRW1XQ2RJa3djK2VsWDdPVy9rYXRoOG02ZkUxZzVxQk55dm5NcldxY2M1bElqNUpnT2lDOGptMkpObit0eFZqd1FJaU1SUUFBQUFYcUYwSkpHeC9YYzFnWnVER2lXVi8yOVVPbVNRREFBQlcxZVNTYWY5U01aYVpzSDFBYVFEcXVPMkRTb1BDcTFBTmVrTnB3RzA5RDc0VjQ5WkR0by92OExYQUtucVo3V3VVSnNRTjgvMWpxRW1TVnQ1MmJjSWNBS3lVWEJHdlovdEFSRHk5ZGp3ejluZEtrMkgycVVsQUt4TkJOaVhKOWhYNStjYjh3MXN0K2ZkUWZzNWxFdjZiNjBVMGZaRWN5UW1venZkZmM1dUlUeElndW1CVDI3TzJQNzlpTEZoTTdVb25JUVk0QVFBQXNMTTFwYzZIWHQ3K1ROMXdwaXNpanFxcCtETFpKdDR0QUFDQTFiTlROVHhMT2p6dlFHYnM4V3ErMTAvbmJlZXJRWmNCdDF3TnV5UXQ5Zkx4WG43dC82cXBBZ05BK3JpYVJPR2U3ZHVvU1pnOWtOOHpPc3ZYQWdBV1h5aTNnM0l5WUVSRXA4Zk9iZjl6NittRzhuVXNWOGttd1gyT1drdFJTMmtTL3FmUCtRWEw1NzZTbEt0dHZqOGZLKzJtdVh6R1NBSkVGMWpibDNuOWpJcXhZSEZOZHVTc3duSVhBQUFBdURobDhraXBrSGU3V29ITVdPak1wTC94VG04RUFBQllBYVZkVkNhRFNOSVBWWXBsVnNyMzA4OFY4VlppcWJPSU9KSzNOeW9OdnZVbERmTHhzZTJuU2ZxS2VoRUNpOG4yVWFWRXdNMTJOZm1JK0xSSW1nV0FaV2RKdS9MK1dOS2E3VHRMdWt1OWtHYnU5cEllb1NZSnF5OUpFWEVxNzF1cHJiZ1NiZVRhY3ZLcGJMKzZkaXhUOXB5SWVJL3Q2OHIzcUhUdmNkejJYczFwRWdWSmdGaDI3V3haYmp4d1BwMmV4UUFBQUlDcEtCMC9YVE5VK3Q1QzZmczdOZkg2NWhsZkFRQUFzQnAydGZiSGtoUVJYUnVRdWxhcExWZ1M0VTVxUmZwSzg1SmpzbjJ0VWh0NHcvWSsyL2VUOUlLcXdRR0w2OWEyZjFUcDNuR3NkTjdvSzFWUFlnSVpBQ3l4bkl3MHpGc3BWUVQ4Y0VUOGs2UmZxUmphclAxV3JtNDdhRldpRzJyN3ZVRG5LMlV2Z0hXbFNzTjNWcXBXM2hrUjhVemJWMGZFOWEzRFF6VVRzZVppMS9uZkFpd2QxbXJIVHNacUJqeDc0a1lWQUFBQTUyRDdPMnJITUdXL3JOUUdibGRSbDFaazhCY0FBT0FjSnZzSisrcm1BT0JJcVYrMHZSeFYxNWYwTEpVM3JvNklHL0t4OVh6c0w2cEd0bm8ybGU1QlBpTHBEeVM5VzlMVjUvbWFUMHE2bDZRdmtuVG5mSXhpRVBQelk3Wi9OeUwrUEM5cGQ3UjJRQUNBeTVlVGtYcVRTVW0ycjRxSUo5anVWR0xXaEk4ckxYOThXR25aKzJGK2xIM3lCMmJNOWxwRWpDVjlxSFlzVTNhcjNGNjZTWkpzSHl4VnlaWHk4a2EyOTdVckxNOEtTWUJZZHBQVkswTGQ3S0RCNVNuSmZ3QUFBTUQ1bElIUUYxZU5ZdnArUmVmdXlLSzlEQUFBVnRYcHZPMUoyclI5UlVTTUpMMVowc1ByaFRWZHR1OGFFUjlYTTRtKzZ3bUFVaG9yaUlpNEtRL0tIVk9xQkVqYmQ3ckdrdjVZMHBza3ZUNGkzbitXOS9WYTc1Y3ViRUtTOC90MmErZlBiRStwbXN3VEpIMmVwQ2RJMnIvRCszQnAzbVg3VnEwRXdMSk00a2x4RHdrQXkycHJJb2p0QXhQbitPT1M3cXVVck45SnRsOFZFVit2ZEEvUVR2NHI3Ukt1YnpNVUVTZHNkeTNaOHF0YVN4enZpNGpqRVhIRTlrRkpuODdmODk1NUpBQktMQWVNNVdjMVMxcHRhdnZ5d0VDeEoyL0xPWStsemdBQUFMQ1RRZDUyN3I0aUl0NlNkM3RLMzE4WmdMUG8zQUlBQUtzcjFMU0xlcExjR3B6NW1Ub2h6Y3d6bFJJQTE5WEI5dTY1NUVHM1kwckpZcStxSGMrUyt5ZEpQeEFSZzJnTUl1TExJdUpuSXVJRGF1NDVwTzJWK3piVkpBRDIxZHlMbk8yeE83KzNMRWtiK2RIKy9PNlNOSXFJMTBURWQwVEU3U01pSkYwVkVXdVNIaUxwNTZmNUExaEIvMFZOOHQrRzdUVnhEd2tBeTJ5azFDYmFxdktha3dGdnlnbE03NUgwUFZVam5LMG4ybjZrVXR1aTNVN2grallIZWVKR2wvTFVmaU1pWGwrV21NNFZ4dy9tL1NNUmNUTHZ6MjA1NEM3OWNMRzZUaW1mbEczdkZwVUFjYWFUZVR0V0d0amxBZzRBQUxDYWRsbzZxbDE5WWloSnRoODJuM0RtYXR6YWpzVHlGZ0FBQUZMcUp5elZ4YlpWR1l1SS96Zi9jR2JxeVVySlV4dHFsZ2J1dXI1U1l1Y0pTWDNibnlIcGlaVmpXalovSXVraHJZUy91MFhFejJyNzM4czRQMHJ5M3JqMWV2dStvOTB2ZnlHVktDZi9qL0x2dDQ4UEo5NjdJVFVEclJIeHB4SHhYUkd4cXlRSFNucTJ1Qis2R005VFN2NDdKRWtSc1V4RkZuWkx1cVYyRU1CRnNGYmorb3o2eHFWeW1TU1ZaTUE4R1dZOUluNU8wckd6ZkcwWHZDRnZONVQrNWtKbkpnWGkwZzNhVDJ6dnk5dlBsUFRxS2hITlNFUjhYZDZlYWgwNzBuckwzTnVjSkFHaUM5YVUvM2h5SnUydHFrYURSVlJtQnJZSGVDOWtxUUVBQUFCMHkrUmdSU2pkVDVTMlllbm8rZDI1UlFRQUFBRE1UenY1YjFmTlFPWmtKQ2x5Tlk2UnBBOVdqbWRaZktkU3N0eHRJdUlSRWZFMk5Tc3lsV1M4WlZEaTNGcCtPQ0pPUk1TUFJjU1ZPU253Z1pKK3YwNTR5OFAyNllnNGJQdUFtb1NKaFdlN0wrbm0ybkVBRjJGZEpDbWp2bzFjUmZsV3RRT1pKZHZqZkYwYnEra2Y1dTl2T2l4SnJRa0VaZW5sRDlRTWFnYXV5ZHQxTFZEN2lDUkFkRVY3eVlZRE5RUEJRbkpydXl3ZEZBQUFBSmkreWJiZzVEMXhxUnpkTmM4VGsyQUFBQUF1eGV0ckJ6QkRGMUtKclFzY0VVZHNmNkoySUF2dTMrZWt1TnNxTFd0MklsY0ZHaW5kUjUzUzl2dXA5UjMralVYVFV6TjJWSklYUzdXZm9hUkJSTHhEMG1NaVlpRHBmcEplVnlIT1pkQ3ovYVJTS1VyTGtVUTh5Si9qbDBxNlE2c2E1RzFpT2V4U1d0WjZpMUp5N2pLN202UmIxZnFCTGhKTi9HN3pzVnNwVnpNRkZzQ2V2RFR3TXB6dkw5V2FwTy9LVmVwS08yRVoyamVMTHBUdk15SzFHM3BLaWFYWFY0MXErcDRhRVRjcGpTVzBWNldzamlSQUxMdkowcXdqU1YwN2dlRHl0VHUwVHAzMVhRQUFBRmdsb1ZRWmNGT3R3U3piMzFzdG90bDVwWmdNQXdBQWNDbCtybllBMDJUN0dqV0RVNnZTUGx5My9hV1NEdFVPWkFFOVJTazVLaUxpajNMVm44T1JLcjVkblFmRjI1T0orbXJHWXBZaFVXVXNTYmIzYXZ2M3NVZHB3SFlvU1pHV1F4eEZ4RjlGeEdNajRrcEpENTUzc0V2Z0ZYbTdybVlaNWtXMmRZNkxpQnZVckNoV2xnZU9CWCtNYzZ4aGUzK08vWVNXZUl3ckl2NHhtdVZIYS85OHF6N3k3MUtTQm1XWnpJZzRWbjdYUUUwNStlOXc2M3o1WDZzR05GdlBWbW9UaEZJN1p4bmFOOHVndEx2R2tzYTJueWJwZHZYQ21icDNSY1NMOHY1UVRlWERoVGlIa3dTSVpWYyt3KzJzMmpmVkNBUUxyWDJENzRrdEFBQUFWaytvcVJMZGJoZjJKRDIzU2tRekZCRWZyaDBEQUFEQU1vcUlQNm9kdzVROVVXbUFVMXFRNWFwbXJLODBNTWVZUWVPVXBQdEdXZzczNVJIeHovbjRNQ0pPS1NWNDlTTGlwb2c0cnUzOTZTTTFZekhMOHZrWnQ1SnQra3FUd0RhVWs5aHk4czBnSndyMmxiN0hqWWo0czFabHJsK1plOVFMeXZiekpaMnVIY2NGR2tsYlNhQURwYzkyTzRIUkMvN1lpckdWT05lVHRIc2FQNXlhOGhMdHRYKyt0Ui9sSERyTTUxcEpXMG5KNVRvTlZOSDZUSTd6NDM5SU9sSXZvcG43aENUYjNsTTdrSTZ3bXZQWXdQYWRKYjJnWWp4VEZ4R2ZYeEs0cy9WOC9OaFp2bVN1U0FMRXN0dHM3ZmVrTkpPa1VpeFlYSHZVWEd4WUJnMEFBR0MxbmEwOUdMWWZQdGRJNXFmTFMzY0FBQURNVXRjbUVuKzMwbUR1cXZTUmpteS80dnh2V3dsalNYZVBpTDZrbTlRa3dyVS80ME50cjRDenJwUTh0VlBDMzhJbkFlYmtyNjJuYWlxbzlWcXZoVklTemdrMVNXTUgxQ3diYkVuZm5xc0RkcmtTMG9YNkhxV2YwNkIySUJkZ0lHMVZ6eXVmN1ExcEsvbXp0K0FQS2ZWVDdHdDlYa3RDemxMS2YxdUtpQ09xLy9PdC9Tamoyd09sYzlMQmlkOHpVTk82dE8xdjlwaWt1MWVOYU1ac3YzTlJFcmc2SUxROTRmNURGV09aaFh0S0drVEVjZHZYNW1ORExWQUNOMG1BV0hhVFZUdDZvbkdFTXkxRGFYb0FBQURVMDFlYU9OTEZDaUUvV3pzQUFBQ0FKVGFRMUtVQndUc285WjliSzlDUGJ2dmVTdFVQVjltL1NQcXNYUG52bnlRcEltN0tyNFhTY3NsNzFTUWR0WlA3U3FMZ1dGSi9JaGxwTlB2UUw4L0VjcHQ3bGNaRXJlM1ZBY2VhR0xTTmlLUDV1Q1BpMDdraTBvYWtuOHZWQVZmNkhzdjJxN1FFU2FCS245MnRwS3QyNG1mK25ZNFgrWkdUYnh3UngvUG50VGZ4dDdxTVRxdEpJSzMrTTY3OEtPUGJRNlZ6MHBIV2VhbGRBQWVvWVVQcFhIazBQeDlFeEw5S2VtakZtR2J0ODJ4LzY4UUVBbHlhM1ZKS3VMZjlxN1dEbWJMSFJzVGZxeWxPZGtNK1BsYWFmSFNnV21RdEpBR2lDL3JLZjFoYThsa3dtSm55K1pCU3czcFZacm9DQUFEZy9IcTIrN2JYYXdjeUkvOUQyNnQ1QUFBQTRNSU5KYjJzZGhBenNDcjlvKytxSFVCbGQ1SjAxNGo0QnpWVi8wcUZ1L1g4ZkNNbm5wUnhsZllZUzZqNXJJemF5VWhhamtTa0V2dXc5VDBPMUZRMzdFMTg3KzNxZ1NWUmFXUjd2KzM5SlVFbkluNDBKd1AreXp5K2lRWDBSQzNQUGVhbWN2R1F2TnkxYk4rNmJrZ1hwaVRmdEpZemJpZXZMcVZjTlducGx6T2VvbEp0YmUvRXNhNVZJY2J5NmlubFlReVZrcExmS2VubGRVT2FxWmN0KzNsMlFZeVUybUQzbHZRMWxXT1pwbitLaUYrM3ZWK3BIVFJRMDlic1M4MjF1emFTQU5FRnA5VGNjQzVNbVUwc2pOL1E5dEwwSVQ0bkFBQUFxNjUwcUxZNzBnOVhqR2RtSXVMNjNEa0JBQUNBUy9PUzJnSE1nTFVjeTNsZXFLMkV0THpNcDJ4L2dicjFQVjZNSjBaeS9jUmdkaW1rWUYxWUVwZTFjekxLc2hSajJDbjJvWnJxaHUzRVIwbmJxZ2NPVzhlT1RTd1J1SkdQWDZPT0w0OTROcmJmVWY3V1drTE4zOXlpSkJwYlRZR0lvYlE0QS9RWEtpSnVVWXA5VVg2bWw2TkhnczAyNVZ4eVl2SVlzQUJLMWVoMjVkOWhSSHhycFhqbXdyYno5bXB0cjVJODBISk1nSmlYdmlaK0h1Mkt1MHJWQVA5azNrSE5Va1RjV1ZLLzFTWXNFMnlrQmF1UVRSSWd1bUJOVFdua1UrcEdReGpUODJkcWJ0aER6VTBmbnhNQUFJRFZzNjdVbjFOSzh3OXpWWWZKd1l1dStKaVVCcTFxQndJQUFMREVQbEU3Z0dteS9abDVkM2pPTnk2UHNsS1FjclcyNC9sNHB3WWVMOUN2UmNRVkVmRWFNUkYrSGh3UjcxZGFadnQ3YXdjelo1OWYvdFltbG9rdXlSTlhWb3NNQURCcmQ2c2R3Q3paZmtsRTNLU21mYmxIelFTQ1ZaMWcwalpRbmxqU1h2NDJJazdZUHFUVTk5NlYrNHppbXJ4ZHFHUy9zeUVKRUYzaDFuYTNwTmRXakFXTDVZMTUyMU56eml1ZkV3QUFBS3lXTXFQNmRKN1JxVHh3MGRVa3VXOFJWZE1CQUFBdVJ4ZXJGajJ1UzVOZ2JHKzFjL1BrbDRIdGgxVU1xWmJiUnNRVGxRYXArMXFTUWNvbEY1SUdFWEdEcEZkSnVrM2xlT2JLOXM5SlVrU2N6dWRKS3hkZjZPQjVFd0NRUmNUSEpIMVY3VGhtNk50eVczbGRTaFZaYzhMN2ZuVm5FczNsR08yMGIzdGZSQnkyL1pzVllwcWxwMGJFSi9QK1VpU0JrZ1NJTGlpbDJ2dXQ1NitxRkFzV1RFVDhROTd0YWZzU0JhY3FoQU1BQUlES2JGOGJFY2Z6ak01MTI1MmR2Um9SdjY4bUNaRDJMd0FBd01WYmlvR2VpL1RsRWZIcDJrRk15U0FpTnFWdFM1QkowcHNyeFZQRG15SmlWMFFjenM5TEFtQVhQN3VMcGxRR1V2NzVqeUlpSkwyblpsQno5TlM4YlM5ZmVsb3Nsd2dBWFRlVTlCWkpiNm9keUF3ZFU1UHc1OXlYZkV5MHI2U1U5TCt1dERUdUNlWHJma1FjdDMwL1NZK3VHZHkwUmNTTGxENEw2MXFTSkZDU0FMSHN0bWI1dFdiOGpaV1dnQVdLdnJZUGV2YlVWSThFQUFEQWFob29EVlo4b0hZZ00yUTFNekpwL3dJQUFGeThrM243eXFwUlROY0RsZHFJVVR1UUtSaXErUjFkSWFsbis5NFY0NW0zcDBiRWw1Y25lUW5XMHY1ZmlrSEtKWGV5TElObiswQ3BmaGNSOTVYMG5WVWpteFBiVDhqYi9Xb3R6YTF1bkY4QUFEdnI1NVZWbmxJN2tGbXkvZGNUazB6Nm9uMVZuQzQ3dHZlMGZrNS9VU21lV2JsS3VTS2s3YVhKclZ1YVFJR3oyTHFSS0RQKzh2NU5kY0xCZ2prc2JTV0l0Z2M5eWRJSEFBQllVWG1wcHJDOTIvWjMxSTVuaHI1aDRqbURNQUFBQUJmUFNoT0tYMXM3a0JuWVV6dUFLYkdraUlnalNnbEk3Nm9jejd6Y0lTSmVsQWRkeDBwTFZ4KzNmWjFTMjUvMi8rdzVJbzRxZmY3S1V0UUhsQTc4cjRpNHNtNTRjL0ZxU1pxb0xqcVd0THRPT0FDQU9SZ3BWV1ArUjBuM3J4M01ETjFUMGhPVitwRVBhUHN5dUtzc2xINFd1eVFwSWs1RXhBbmJSK3VHTlhWZmxpZDRuQ3lUUGZLa2g0VkhFaUNXWGNreTdxbVo4Y2ZOTFlvZlZ1cjhLSitOVW9aK2ZKYjNBd0FBb050Q2ttemZPdC9FdjdoeVBETVRFYitlZDB2RmRBWmhBQUFBTGsxUDBwL1dEbUlHTnM3L2xvVlh4Z0wyU0pMdHI2NFh5dHo4YlNRMzJONWJxczlKR3R1K09pOUxhM1VueVhOaDJiNDY3KzVSR25NWWxxVEEvUG91U2ZlckZON2MySDZFVW1XazlyZ0xpUklBMEYwRDVZcDRFZkVlU1Y5VE5aclplb250MjBYRTBaTG9qNjNDUytXNjM3UDlRNUp1WFNtZVdmaTFpUGk5blBSWEpuMG9JazZkNStzV0FrbUFXSFpqS1pVWlZYUENLWU5jcjZnU0VSWkdSTHhHcVpPdS9UbVJXaVZxQVFBQXNGTDJTRkx1dURsY081Z1ppNGt0Z3pBQUFBQVhyeWRwbEt2TWRZYnRmYlZqbUpJeUpyQ1JLK0oxc1dKajIvc2k0dDVLYmZ4QlRnRHM1ZSs5bDFkSUtoUGk2UU9mc2RhS1ZHVVFmRjBwTWNMNTlWc2k0cThrTFVYVm1Ndnd6THd0S3pCUnFBTUF1cTBzaVR1UU5JNklOOVlNWmc1dXRMMHZKNEt4Mm1DeXJ2dzVzUDA1a3A1WE41enBpb2pIcTZuMExFbnJ0ZzlxU1NaUmtRU0lMb2lJdUtYMS9IUys2ZjMrV2dGaFlXeW9OZGpabmhWWkp4d0FBQURNdzFrR05VT3BjeUpzUDFUU3dmbEdOVmYzVkI1NHNsMDZwL3BuZnpzQUFBRE9ZbGZ0QUdia1ByVURtS1k4S05mMTl1NlRJK0xmS2lXbVdrMi85emozZTVjKzc1SVl5U1NnK1NuSkVCdXRmU245VHZvNUdiRExTUU1QemR1aG1zOW43K3h2QndCMFFPbG5sZTBySXFMckNlRC9TODMzUEpDazF0S3cvVlpmZEJldWY2R2QyOVh0WXh0SzMydFAwbC9PSTZnNU9tVDdTbTNQcFRzWkVmOWFLNkNMUlJJZ3VtZ2NFYU9JV0lwTVhNek0rMm9IQUFBQWdEb2k0cmhhMVFkc0gxSWFpQmpidmtyU0gxY0tiVjQrS2VtVWxLcFBWSTRGQUFCZ21aV0VuaTRNNkxYZFNkMm8xclV1U2JsUzQwZnFoakpUajQ2SVZ5b2xsVTBtKzJHeG5WTCtuVVZFVjVPS1pmdVJTdC9uWms2RW9CQURBSFRibW5JeVhPNkg3VXU2UTlXSVp1dUp0dSt1ZEU5UWxrSStscTk1by93ekdLZ2IxNy9kU3BOSmVoTVRiVWJTMXVUN2RhVis5amZVQ1hGbXZqMGlOaUppcENYK1haSUVpSzRhS1pXOS85dmFnYUNhNzY0ZEFBQUFBT2F1cDJZMjV0WGxZRVFjYnMzSVBGb2pzRGw2WFVSOFFtY09DbElKQkFBQTROTDBsUWFCM2xNNWptbjZQSFdqY2w1WjhyWXY2YXFhZ2N6UW95UGkvMnM5N3lzTnZIYmg5OWRwZWNXcU1nNWJrZ0Z2VXkraW1TcEpBSTZJVDFlTkJBQXdjN2IzcUZVVlQ2bEkwMUZKUDE4dnFwbDdyM0tWWHlsVm9zN0pmN0o5UU5Jd1gvdVhYWm0wc0N0UHRCa3JMWWU3MS9iZS9EMXY1SlYydnF4YWxOUDNKeEh4VXFVY282WHVSeWNKRUYxd3RobHZGa3NDcjZ5SWVIUHRHQUFBQURCM20wb2RMbmVPaUJ2VnF0Z1NFY2R0djB6ZHErSXk2YmxxelZUTW5YSUFBQUM0UkxaTHNsV1graHNmcG01VWtpdFZTcDVaTzVBWmVYcEUvTFp5K3o0UE1JK1VsbUJiNnNISlZUQzVUTFB0QXpsQjRpNFZ3NXFaUFBHdXAvVFo3UEx5eHdDdzZpSmY0MExTS0MrTE8xWmFNdlU3Nm9ZMlc3WnZVcjdPdFphSDdaZWZSOTR1dXczYisyeVhpZlo3SlcxRXhJbUlPSkdyQTBvZFcya25JcjVRYWFMTnVYS1BsZ0pKZ09nS0sxMW95a09TRkJGL1dpMGkxUFJQV3FJVE1RQUFBS2JHa2hRUkg4NGRGR1d3N0tEdGUwdjYxcHJCelVORS9IbmVMVXR5ak5TTnBkNEFBQUJxYUEvbS9WN1ZTS2JyN2txVnlicml2OVlPWUFaZUZ4RS9uZmNIU2dQTVIxc1Z6ckg0eW4xWVQ1SnlBcUFpNHNPU25sSXJxQmw2cUpya3YrRzUzZ2dBV0dwbGdzeWFVZ1hZWTdrZnRpUzhkemtSL0hhMmYwRHBPbWVseVNoN2xSSURPNU9iRUJHblM1VkR0YjR2Mi9zaTRvanR6bnl2MlhWS2JaaU4xckYyN3RGU2ZiOGtBYUpMclBTWlhsTnpjN1VoNmVQVklrSXQvMUVwVXhzQUFBQXJKczgrWGM4ekUvZVd6Z2xKZjEwN3RqbDRUTm14ZlVYZUxaMVFKQUlDQUFCY3ZGSlZ1Uy9wSFRVRG1ZR2xHc3c2aTdCOXQ5cEJ6TUI3SXVKcmN1Vy9VS3AyZmtXK3R5bkx6cEVNdVBpY2Y0ZUQxb0g5a2hRUkw1YjA3bHFCemNqLzF2YkJjd0JBTjUxV0dvZmZXb2trSWpadDN6RW52SStVRXNPNzZxZHNQeUR2YjBiRU1UV0prVjFJZ0Z4WDYzcWUyNTdyWmZsajJ6OVRMN1NaZUdKRWZOVDI3dGF4VUpOM3RIVDNUQ1FCWXRsTkRtUnQ3dkNlemxmN3dIWVI4VmUxWXdBQUFFQVZ2ZHp4Y2xKcFdZYk4zRG14ZERmcmx5SWlmck8xLyttYXNRQUFBSFJFR2R5TVZqVU1MQTVMZW5IdElLWXRJaDZnZEQ5enRIWHNkTDYzdVRvLzUvTzQrUHF0MzJHcEJuaE1UV1hIejYwVzJXd2NVcFA4UUpFR0FPaXVzZktTc1pLVTJ5WWJPWkZxWDU2MDhGWkp2MTgxeXRsNnU5SzEzVW8vajVIU3RhOExsWEJMQW1BdlAyUjdkNjRBZUU5SjMxY3RzdW43V0VTOHh2YitYRkJnY3BMTlpPN1JVa3l5SndrUXkyN3lNMnlsUDhZeXlEZUlpRGZPTnlSVTlzNjhaY1laQUFEQTZobm5tM1VyZGJwc3JFb0NvS1RuS1hYTWxKbW5RNlVCbUtWY3RnQUFBR0JCRE5VTTZDM0ZvTThLZWxqdEFLWXBJa0twd2s3NXpEbmY0MnprMTB2eVh4Y3F6WFRkU09uM2RGSjVFRG4vTG9mNU5VbTZVNVhJWnNUMlEvSXU0ek1BMEYwOXBXVDI0MHBObDYyRTk0aTR1ZFZXZVZ5ZDhPYkQ5djlXa3lSM1FLa2Zlbi9kcUthbXA1VGNPRll6NlY2Uy9xNWVTTk1YRVhmTDIyTTVFYkM5QkhJNzU2aFlpdnk2cFFnU09JZnhEc2ZhZjR3bDIvcVZjNGdGaStFcjFReDhBZ0FBb0Z1MkJsN2JuU3EyRCtYZGZxNk9zVDhmZit1YzQ2c21JbjVFemN6VFlxaDBmMFFDSUFBQXdLVUpwV1NXdm1oVDFkQk9kR3NuWWZZbDlXeDNyWkxhRitYdFdLM1AzRVRWdjVKYzFZVktNNnRnMnozWkRoVWNOeVE5ZmQ1QnpkQ1A1aTFKMHdEUVhlMytSN2YyeDJxMWx5UGlGblVzMlgzQ2syMC9VTko2Ukh4UzI1UGx5a1R0WHJYb0xsMVAyeXZnbFlrTW42b1N6ZXhjcDlST0s5V2FKOXRvTzkzNzdaU2J0SEJJQWtUWERTUXBJcDVjT3hETXpTNUpvdzVsMmdNQUFLQmgyM3ZWZEtxRTBvelR3M25HNWFqMXZyZEtlc2paL3FHT2Vic1lsQVlBQUpnRjUzN0cwWG5mdVh5V1lWQ3luZWkycHR6K3Q5MVhHb1Q3aVNwUnpjWUxJK0x0K2I1RzZ1Wm5EaTIyOTBiRTRZajQ2ZHF4VEZHNUIrZitGQUJXVkd0eTl1Nkl1RjdTRXl1SE5FdC9ZbnRONmJyWG5yeFNFaVZMMGxoWnFXVVpqQ1h0TGs5c1gyWDdXeVIxS2ZmaWhSSHgwYnpmWGxsb0dlNlB6b3NrUUhSZDZTUVlTUHFUbW9GZ0xoNGNFVGZaUHRqS3RBY0FBRUIzRENMaWhOTE4rZFZLZzdKWEtTODlZWHR2N21qNlgxcWRCRUJGeENOcXh3QUFBTkJWRVhFcUR3eEphVm5QVHJEOThOb3hYS0F5R0ZlVzVISytKNUNrUjlZSmFTYWVKV2xVbHRTemZVM2xlREFmWlZXak85VU1ZcHBhaWF3QWdCV1V4K2dIcmZiYU95UzlyV0pJczFhV1F5NzNDZWRLSkZ1R1JNQlFya3FkSitNZmxQUUxkVU9hcm9oNFd1dnBJQ0krbmZlWG90TGYrWkFFaUZYUVY4cTAvb2JhZ1dDMkl1TFA4dmFUdFdNQkFBREFUQXlWbHYyNk9rLysySnVYLzcxS2tuTG4wdStxMnpOTUo3MUx6WkpnQUFBQW1ETGJ1MXJMUTcycWFqRFR0U3hMNmU3SzIyMlZ4VHEyRXN6OVc1UGFCN2IzUjhTTlZTUEN6T1g3MTFFdWFuQzl1clBFODFkcWV6VWtBTURxR2RyZW45czBINDZJWlpsOGNpbDIyMzZhbXJacVQwMnlYNmtBYUMxUGxWd3JyN3lZMnlvZnFoelBWRVhFbFVxL281NVNlNldubEV2VWlTcUFFa21BNkw1UStxTTFOODJkOTBVNUcxMUtXZHJyTllNQkFBREFUUFFsalhNQzRLRXlvelRQMWd2YmZ5cnBnVlVqbkwrdlZJYzZLUUFBQUJaTVJNVE5yZWZ2cXhiSjlDMUxrazU3V2R4UTAvYjl2Z3F4ek1MSEkrS3YxRlNFRythRVFQcTNWMFEreHd3azNhRjJMRlB5REVtbmF3Y0JBS2ltSjZrWEVjY2lvbDFGKzFhVjRwbUhGOWkrSnVjcWpKUVM2VUt0WlhXelpjblBHa21TN2QrckhjaVVmWm5TWlBxeFVwWHgwMm9tMTQrMVBQZEg1N1FzSHpMZ1VsbmFLcDAvVW5kdW9qQWhJdDVlQm9GdEh4TFZVQUFBQUxwb2E4bUVpRGdpU2JidnFGUTlZVlBTZzJzRlZzazdJK0t3OGhJTnRZTUJBQURvb04yU25KZTNMQlBPdStKK3RRTzRRRmFUK0dlbHRtOVAwbit0RnRGMDNWM3ArenBsKzFDWjZHNTdjdEFZM1JQNWZuYVlIeWZWamVVU1Axc2RXVTRQQUhCSnhxM0NQYWVVMm0zRGlEaWw3clRmZHZMeDFoTElVbTdmVGJ4bkdTWnk5NVR1Zjc1SjBwZlVEbWFLWGg4UnY2ZG1vazI1cjJoUHZPbkVKQWFTQUxFS0Jya0tZRDhpYnBEMDl0b0JZZXErUXVraTJwZWtQQkFLQUFDQTdobmFQcGozblR1VVR0bGVsdVVVcGlvaUh0QjZ1dXVzYndRQUFNQ2xHa3RhajRpamtoUVJMNjRjenpSOWNlMEFMc0JnWXRzMVA1MlhtdTRwcldaME9DSnVVZnJNSFR2UDEyTDVXZEpSU2JKOTE1dzQ4QlYxUTVxYU9QOWJBQUFkdGQ1S2htdFA1amdaRWYrdFVreHpZZnVQVzVPSHBET1hBSjVNQ2x4RTVmZjF2NnRHTVdVUjhWVzI5eWtWa2xwWHppdXhmVVYrUzA4ZG1jUkFFaUJXUWNuWUhkbmVGeEVQcWhvTnBpNGkzcVIwRVIwcG5iQ3BnZ0lBQU5CUnVRTGd1bEpueWw1Skg2OGJVVFgvdmJVZm9oSTJBQURBTExRSGdybzJucklNeTgyV2xYN0toSmZJenc5VWkyaUtJdUlIbGI2bnNTVFozcSttS2dtNkwvSXlpWU9JK0VlbGNZMU8vTzV0c3lvWEFLeXVEYVZxZ1B2ejgxRnV1MW5wbXRmbFJQR0hTcm9tSjVzVjdYdUlaWmpJUHVyYWhQdjhtWXVJT0o0L2x4dDUyOCtUdmRhVjJtQ2QrR3gyN2FZVjJDWlhCdG42ZzgxLzJIc2xkV25HNXFxN2k1b2I0M1dsUk1DdHFvQUFBQUJZTHExT2tuV2xHWGlsWFJkcUtvQnMyUDVSU1RmT09ieUZFUkUvbEhkNzJqNnJGZ0FBQU5NMVZETXcxQ1hMTUQ0MGtsSy9mbjYrSjIvLys4NXZYeXBQVldySGJ3Mnl0cXIvRGF0RWhCckdTci92Z2FSUlRncThiOTJRcHVJcGFoS05lMm9HMWN0OUsrTTNBTkJ4N2FyR3BhcTJtamJPWStZZjBkejhYZXQ3TC9jUTY5Slc3c29pNkd2N2hLQ0Jtc2sydjFvbG90bjU1cnkxMUh3dTg4cVNvL3phUnZzOXkyNFpidktBUzVaTHpmYVYvbUFqVndJOEllbW42a2FHS1hsWFJIeTRQR25OQ04yajVxUU5BQUNBSlpIYjYxc3o4cFE2U1VaS25SSldXZzU0diswTlNjK3VGMmwxRDFlVEZGbmF3RjBibEFZQUFGZ0VJV2xUZWNCeWdRYnVWa1Y3R2VDK21nRzZiNndReTdUOVl1MEFVSjNWSk1lVjhZeXhwSCtxRTg1VS9TZEpKOVZVdWl5RDZwdDV1d3pMSVFJQVpxTVhFYjhwNmJXMUE1a1ZKMlhwMlVIZVJtdVo1SnA2U3YzSkc1TFdjei84VUNuc3I1YjAySXF4VGR2ZlJzUXIxSkVLZnhlS0pFQ3NnaklZNW9pNFdaSWk0cU9Tbmx3dkpFekQ1TkxPRVhHTHRDMFpFQUFBQUV1a0pBQ1dHWG10cW9CbDBQV3VrajZscGdMSVNvcUlQOHcvbTZGU1l1UmVyVmhuQmdBQXdKeVVDZVlGMVpmbjYzVHRBR2JralFzeUNJekZFRHF6SXVTeXIyWjFTT2w3MnQwNlZxclliL3QrQVFBclo2Q1VFUGUxdFFPWnNhZm43VkRwMnJlbTdkWDNhaGtycmJKemphU1R1ZDFSN25FNmxaZ1pFZmRXV3ByNnFueG9jSzczZHdWSmdPaTZ5VTRaSzUxY0J4SHhTa2szekQ4a1RNbS9WenBwSDJnZEcwdGJ5WUNVa3djQUFGZytrVHNlK3JZUHRKYjkybVg3RlpJK1dERzJSWEdIL0xNcHkwb00xQXltQUFBQVlMcEtkYTZCdEcxWldzekhXQk9UWGZLQTVWS0xpSy9JVlZjQXF4bXI3YWtaMC9xeE91Rk1YYnRpUFVzQkF3Q2tsSUMyVCtsNmNQdmF3Y3pRajlpK1drMWJkcEZXY1ZtUGlCdlZUTFFmMkY2aytLYmh1bExGUGQvRDlkVXNSOTFwSkFHaTY4YTJyeXhQYkI5VUttMDZ6QU5uZDZnWEdpN0RoeUxpL3lrTkVoL054OHBhOVQwMXk4WUJBQUJndVpSNzFGR3JHdUJEYlg5YTBwUHFoYlV3WGhjUk4wVEVKMXZIZXZsblJTVkFBQUNBNlN0VnEwNHE5VDh5OFdMT1d0WEJwZlE3ZUVpdFdLYXBOYWtIcTZ2Y3cyMjJ0bU9sZ2ZuRGRVS2FIdHVIdEQyUmwzdFdBSUNrclhaUTVFUzBwOWFPWjRadVZGcG05MHFsSElhTnl2RklLUm11eExGaGU3L3Q3MUMzY3NlZUtFbTU4bmFaZkxBeTdaQXUvU0tCSGVVbGdDUHZsNW1hUFRWSll2ZXZFUmN1WFVUY1ZkdFAxS1VEem1vcW9RQUFBR0Q1akcxZjI5b2ZTL3JqaXZFc2xJajRtbHdKdTFRNGwzS256Y1RnS0FBQUFLWWtEOXJaOXU3enZobXpWUHJ6bDMxeTBGZlJka2UyVzgzU3VPMGxja3NsbnVmVUNHcUt2aUp2eTFoMCtmNjZ1c3czQU9BQ2xGWCtTbnNvSWw0azZmcXFRYzJRN1kva1pMUnhxVXhYV1dsVGwxeUx1MHI2NlVxeHpNSS9SY1N2Uk1SSHRUMG5hR1VLU0pFRWlLN3JxY211bHRJZjk4RDJvWHl5N1VYRVgwcDZlYlVJY2JFK0syOTNxOG5jYnAvQU55VHRtbmRRQUFBQW1JNkl1TUgyajlwdUw0c0U2VkZLOXkrbEV2YUdwRjVlUm14QUpSRUFBSUNaNkVYRVNKSWk0cFJTUCtTLzFBMXB0VXdzd1R4VWsxaTBsQ0xpOVJGeGk1cEpQVmhkcDdUelBlOVFhZXpqaGZNTlorcWVrTGViRThjbm53TUFWa2p1MjR4YzliWWtvbjF1eFpCbTdUcmJUMUQ2bmsvVURrYXBvSkxVVERML2k0cXhURjFFM0YzTjl6Yk8yMzQrMWovSGwzWUdBeXJvdWpKamFrM2FXZzU0R0JFMzVVenJzZEtBMlZOcUJZaUw4cHlJK0llOFA5TDJ4RCsxc3VkWEpwTWJBQUNnUzJ6L1hFNysrN0hhc1N5WUQwWEU3NnE1ditubHh6Z24vdzNWZE9BQUFBQmdldHFUajYzVUhydGR2WEJXVGxrQnBpc0RkaDlUR3V6ZXBjVllEZzUxV2R0WE5RcTFQdXNkV0JMNFlYbmJybkM0TWt2eEFRRE9xaVJrOWZLMm54TUQ3MUkxcXRsNnRWS0JvMFV3Vko2TVl2c2pkVU9adXZ1cW1VeXhvWFF2c2FGMFA3ZXVGY2toSVFrUUs2SE1Gb3lJSTYxako1UnVPSVpLaVlIY2ZDeTRpSGltcEg1cnVRUlB2SDVpcCtNQUFBQ1ltYjdTRFhScFMvZk84ZDd5MnJxYXFoZDlwZmJkTTNMeTMxTm5FdVdTaTRpN2F2dlBkcXdtSWJBWXppOGlBQUNBbFRSU2FwUGRYRHVRRlZMYXVHWGdidGw5ZmQ2V3dVbWduV1RzMXZOUkxucHdaTWV2V2c0OXBjSDM4bGtmYTNFU0lBQUE5WlEyOVdUZjVrbEpUNTkvT1BOaHU3UnIyOWZHTXFrN2RPNSs5WXRSL3UxMm4zM2tHRXBCcFEzYjN5YnAwSlQrejBYdzdJaDRUOTR2N2FsMmYvbktUTUFoQ1JDcnJsUUkzSmZYbis5eWh2bFNheVZwUms3cUpHa1RBQUJnL2tMYk95cEcybDZWdWIyc1R6dlpUMHBMMXg3Szc5K3d2ZGYyVTNNSHlITm5Idm55dW4zZXJzUk1SUUFBZ0FWVDJtQjlOWU9WVjlVTFovWFkzcDhuaFcva1B2eWxGUkYvb3UzM1VzQlo1YUlIUDE4N2pzdDBXazJ5UnlndGdVd1JCd0JZYmFWL2VmdkJpQnNsdlVycFd0Rkp0djlBS1RGdHJIUnRMS3U3V05LNGxhUjNPZHB0VEV1S1VtQ3BGRlN5Zlc5Skw1bkMvN1VvVGtuNkg3V0RXQlFrQVdMVmpXMGZpSWpqRVhFaUlqNHM2VC9YRGdwbnVHM2VycXZKMk9iOEJRQUFNSDlXYW8rMUIwTUgwbFluZ3ZNRW00UEt5WDVxWmpLT0l1SndIc1Q3YzZVS0tqODE3MjlneWJ4VXVmM2Jxb1lOQUFDQStTa1ZPVWJhUHVFRjh6R0lpR05scFI5SjMxUTFtc3UzdGZ6cmxBWjUwWDB2cWgzQVpTcFZubnBxbG44RUFLdzIyMjZQOCs5UzA3OThZMFIwZWNMTncyMS9vZklxTDdrUC9iUnkrN0MxNnVIbDZPZEh1UWIzSStMNHhHU2F2NTdDLzdNd0lxSXNLUTJSUkFNTXlnbWgzSFJIeENza1BidG1VTmptOWtybGYwUHBJaGhLeVlDVEpZSUJBQUF3ZXlYcGI2Q2MyS2VVcEZZR3N5SlBzRG1pcG5LemJmOGIyMC9JUy81K1N0TDk1eDc1RW9xSWI0K0lUOXJlMXhyNEJBQUF3UHkwcTVSWXFZMzd5VXF4cktJeUlieFVHZi9paXJGY3JsZVdpb2JTMUFaNTBXMlI3NjI3WUt6dENZQ3M5QVFBS3l3aU50VlVSeTd0dlo2YS91WXZxaERXdkx4Rmttd2Z6TmY1c1ZJaXBMUjlWWjFMZFVycE9sdXFEQTRsT1NJK25mL2YxMDdoLzFna2oxTFRyamlqd3VRcUlna1FVS3FxRVJGSGN5TGdLQ0orVE5KN0tvY0Y2U0U1NC8rRTB2bHExT29vNlozN1N3RUFBREFESmVtdkxGdFFsa1VMcGNvb3RyMWZxY1BDdHIvVTlsRkoxMHQ2ZFoyUWw5WTF5c3RCa0FBSUFBQlFUYWxzWFI2VzlIOXFCclJpeWtEZWFhWGZ4V2RWak9WeS9XeEUzSnozcHpIQWkrN2JxaHk1ckd4ZmwzYzNsZm9UeWtvQlZBUUVnTlUyVkxQczcxaE5YL011cFd2RXV5WDlTcDNRWnMvMlIzSUNZR25ybGtUSTA5UDQ1MXY3NWRyYmw3UmgrMG1Tdm5vSy84ZWllSFZFL0YrbGNZZ0RhbjZPSzQwa1FLeTZvYVQxTXFpV2s4MGk3ejlZMHA5VWpHM1ZmVzlFL0ttMHRmVFpMa21LaUdQNWRTb0JBZ0FBek45QXpRQm9XVmFnek9ndmxWRWVZL3VXWFBYdlRaSnVYU25XWmZib2lMaEplY1ltUzRVQkFBQlV0YWFtdmR1VDlMNjY0YXlVTWhBNnltM2ltMm9HYzVsdVVGUHhwaVNYQXVkays5WmE3dXFqRDFicVJ5amowV3RpYVhVQVdIVURiYThRMjA1NEh5b3ZYeHNSM3pMM3lPYm5PdHZmcXBTa0o2V2Z3YUQxL0hMMDFWUUJYTXZQUjNuaS9pdW04Tzh2aklqNGVqVkxLUjg3ejl0WEJrbUFXSG0ycjhpN2ZkdlhwRVBlSzJraklyNVEwaHZyUmJleXZpSWlYcURtcEgxYzB0RDJ0ZVVOdHErdUZSd0FBTUFLSzB2L1dxbFRZcHlyL2IzUHlhYWtYNmdhNGZKN2RVVDh0dEtnNExxa1laNnNSTFVRQUFDQStadHNndzJVS2paakRteGZxZFJ2dnpjaVRrVEVGMFRqeW9qWXRlQ1B0WWdJU1ZkRnhGR2wrNm1TL0VjbE5KeFhyaDc1K3RweFhJYjdUend2VlFCSmdnV0ExZFd1ZHRlYmVFZ3BZZTJnVXE1R2w2OFhMN045dTd5L1N5a1hZaG9Ud1VzaHBWSmRjWmdMTG4xZ0N2LzJJcmtxYjh2M08yWWlmVUlTSUZaZFAyY0Y5NVdXQWI1SnFUTGd5Zno2SUNLK1FsUUVuS2VIUnNUdjV2MnhVa2ZiUUpJaTRvYjhYUGwzQlFBQWdEbXlmUS9iMzJQNzVwejBWNnI5ZlhidDJEcGlIQkZQenZ0N2xDcUVyQ3N2MlZBdEtnQUFnTlcxb2RSSDJWTktXdG1ReE9EU25PVEo0YVAyQ2o1S2ZjWHJhbjQzQy92SVNZeUtpRnZ5WUxhVWloQWNtdDVQQ1IxV0t2bDhxSFlnbCtIMmFwSVEydm83dkJjQXNCcktOV0ZkcVkwOVV0UGVMZ1dDamtoU1R1cjZoZ294enN1TnVZMDRsTFpXcmJ4YzQxYTdzN1NmdjFQUzdjN3kvbVgwclR2OXJLYjA4MXQ2SkFGaTFaV0xTaW10YWpXZEIxSnp3djFDU2Q4KzkraFd6elVSOFE1dG53bTJvZTNydHpQNENRREFZaHVvcVdqUUhxUnBQOGZzbFVIS003UTZBYzU2TENmN2ZiL3RQM0NMcFBkS2VyNFkrSnlKaU5pbDVsNWtvN1dkeGxJUUFBQUF1SGlsSWtsWnNpd2tNYmhVUjduUEhHcEorb2hiQTVFdWc5bjUrT0ZLSVdFSlJjU1AxNDdoTWp4VzIvc215cjN0Y0lmM0FnQld5MlNmWjhuYmtKUVNBSE1sNkZkSmV2dThnNXVqRitWdFNZSXNZeWtsQ2JJb0NmVG5XeTJtbDl1ZHZmUlArTE1sUFhkS3NTNkMxMG42amJ6ZlYycG5NTG1nWlZmdEFJQUZGMG9WT0U1R3hFdHQvNnVha3dxbUtDTEtCVzFrKzBCZUhnRUFBQ3lmZjFKcVE2MHBsN0ZYVStLZjVZNW1MNVIrem1OcEs3bnZIcEx1SitrdWt2NVowdTdjZ2ZCRXBWbjV5dStkZTdEWTVrNjFBd0FBQU1DT1N0VzVubEk3KzRxNjRRQllFU1V4b25mT2R5MCthM3RDdGRTY1R3RUEyRWxFeEltU014QVJEM0ozTzY4ZmIvdmxFZkdIeXZjZHRxK09pSC9KUDROOWtuYTFjaWZhazJIYXl5aTNsOFU5RkJHSDh4akErK2J5WGN6UFV5UGlXUDY1UkVTTWxOcE1aVnhrNVpFRUNKeGJxUXhZT25yK242UzdTZnBnemFBNjVrUkVsRFhiZS9taXhsSy9BQUFzcjVmWmZsbnRJSUFsOHprUmNYM3RJQUFBQUhDR3NlM2RFU0dSdEFKZy9rTFNadTBncHFSZCtSNEFnTE95ZmV1Yy9IYzBQOThYRWJ0c256N2YxeTZwTjB1NlVybVlRaXRYSWlMaTB6cnorbG1LTUd6dThKcGFDWU4vUHBObzY3bHR1NkoyUkJ6UHU1T0prQ3VONVlDQjgrc3JKUUFPSXVKa1JQeGpxMm9kTHM4dlNicW4wb1VxbEg3R040bVNyUUFBQUZnZC96a2kvc2IyZ2RxQkFBQUE0RXdSY1Nydmx1M050V0lCc0hMVzFJMnFOcHZhdnVRamcvUUFnQjNsWllCTDh0K2RwWlRzWmZ2ZlNQclBWWU9iSWRzM0s2Mll1QzhmNnR1K1N0dVhTZTVwZXdMZzJkb0l1MngvcTZUUG5tSEk4L2JFWE4yd1ZBQThycDJyRGE4OGtnQ0I4eXRMcWUxVGMvSVlSWnIrK2ZKcVVTMi9iNHlJYjQrSWp5cWRvTmNrbmN5dmpiVDhKZTRCQUFDQTgvbWVpUGlGZHVjV0FBQUFGazdwczdUU2lqR256dkZlQU1CMjYwcm56ekpRVHhFSUFNQlpsUWs0ZVNuZ0QrZjlmUkh4MFlqNGhiclJ6ZFNhN2UvSnlXMTkyMWVVU25kNVdWOHBYVWV0bExQU1RnRHM1MGZZM21mN1NrbGRXcTNwM1pMZW9DYjVyeGprNzdYazhGRElTeVFCQXVmVk9xbWVWSE1DVlY1TC9TbVNIbGdydGlWMUtwTC9vOXhoWnZ1T2FsMnNiRjhuc3JVQkFBRFFiYStMaUo5VDZweTRvbklzQUFBQTJGa1phQ3RPU3JwVm5WQUFyS0JOTFhuQkJOdVRZOUc3cWdRQ0FGZ1dRMG45UEdHNkowbDVTZHk4RzFFdHN0bDd2dTJIS1JXazJrcDJpNGpOdkR1YWVIOVpiWEdVSDg1Zjk2L3pDSFplSXVJQkVYR3NkV2hQM2c0am9sUnBEK1hsbEZjZFNZREFPZGplSHhISGNuYjVDYlhLcmViMXhrY1I4ZTU4c1hsdnpWaVh4T01pNGlvMU03MnNkTEgrcUpReStwVU9YSzkwb2dZQUFBQzY2QThqNG10eiszY1lFVWRxQndRQUFJQWRUVTVVdHFUUHF4RUlnSlhVWHVadUtVWEVMYTJuWTZYa0RnQUF6bVdrbEU4d3RuMk4waks1QjlSTXpybHZ0Y2htNzgyMlAxT1NiRitkajIyMFhtKzNDOWJVbXJCays0RHQzNXQ5aUhOMWR6WEpqNWEwYm50MzYzVXJWVUM4U2hTWmtrUVNJSEJPRVhFeWI0L2IzcDhQajVXcWRZVFNTV1VvYVJBUjk1TDBGVlVDWFFLNSt0K3ZLLzI4MmxucTdabTBJelVaNndBQUFFQVh2VE1pSHE0ME0vT29tdll2U3lJQkFBQXNwb0cwYmNVWVZvWUJNQTlsbkdUWmx5QXZZMERjOHdJQUxrVHBLOTBsU1JGeFkxNmhzZlNqS2lMZUkrbS9WNHR3OWw0a2FUMGlic3JQKzYzdDVrNWZZUHRhU1ErUTlDV3pEMjl1WGhnUjc4Lzc2M203VWFvQzV2dXp2bEkvTzFVQU01SUFnWFBiU2xhYktERTZWRE1ESzlRa0FyNHhWd1Y4OFZ5alhHeFB6RCtUZFcwLzU1eXhKbnV1dHVqV0F3QUFBT2lTMTBuNnNyemZWN3FYMkszVTlwMWN6Z0VBQUFDTFlhUzBKTmtKcFRiYzN2TzhId0Ntd1JQYlpWVVNGOG85TDFWNkFBRG5VdklFdHFyZjVSVWF5MnVEZk93Wjh3OXRicjRzTHdzc3BlOTNaSHVmbW10cEx5ZkFqWlh5VlhvUmNZT2tOOHcvMU5tSmlLZEo2dWZ2ZFdPSDE4dEtudHJwOVZWRkVpQndlY1pxYm1DR3R2ZmIzaHNSVDVGMFNOS2I2NFZXM2M5SzJoOFJyOG5QeC9rUitTSkZ5WGNBQUFDc2t0ZExlbXBFSExPOXovWWVOY2wvVk1JR0FBQllYSk1UTnVqWEJBQUFBT29ZS2lYR09SY2k2cXJYNSsxUUtjbnZlRTZHczZSeFJJd2t5ZmFWa2padEwvdWtnVzN5NzdhWGQ4dGtMRndBa2dDQnk1VFhITzlMcVZwZ1JOeVM5NDlFeENNaVlrM1NPMnZHT0dmUHlVdi9mbjlFSE0vSEJwSktDVmJLc1FJQUFHRFZ2Rm5TMTBmRVI4dUJWbHU1Sis3TkFRQUFGdG5XNEtMdHN5N0JCUUFBQUdBdWVubTdMdW5CTlFPWnBWWmkzeTZsVlNsUEtIM1BBK1ZKU2prNXNHdExJKy9QQ1krYnlrbVErVDRNRjRDQkJ1RHlERnBsUnN2NjlGWXFTM3BRa216Zk9pSWVFQkVEU1crckYrck1QVjNTYlNUOVZENHBLMWY4azVyWnNWdHJ0WXRzYlFBQUFLeUdOMFhFbCtRT21YMUtzeGVQSzkwM2xBNHJsa01DQUFCWVhMdVYyMjBSUVFJZ0FBQUFVTmVHVWlMY2hxUVBTdnFOdXVITWp1MmZVY3ExS1BrV0c2MzlnZTBEa242Z1Jtd3o4Z3VTZHVVY0hOdStzMUxsd3hPdDNCT2NBMG1Bd09WcEx3T3hwalNRSjBtamlEZ2lTUkZ4TkI4YlI4UVg1TXFBejU1ZmlEUDNOYm55MzA5SHhOR0lPSjVQeXFXNlNWK3BrMnlzZEZFcU0yZEhPLzl6QUFBQVFHZThQQ0srVmpuaHIxWDlUMHFkTkZlcVNRQWN6RDA2QUFBQVhJaFRhaVp2YkVqYVV6RVdBQUFBWUpXVlB0U2g3WU1SY1RnaXZxNXFSTFAxZmJiMzV3UzRjazhpMjFjckpRUCthN1hJWmlBaW5sSnlUU1N0UjhTSGxmTk5KdnJXY1JZa0FRTFRVUkxkdHA2M3F1RWR0TDFmemVDZUkrTEg4anJtOTVMMDl2bUdPaFcvbEJQL0JoSHgvMm43Z0dVL1o1eExxVFRyWHAwNW9Ca0NBQUFBdXUycEVmR3RTZ1BGNjJydUY4cWc4VEFpYnM3N0llbjBuT01EQUFEQWhiSG96d1FBQUFBV3dURG5YK3d0UlpseU1tQ1hKMWgvcWlUQWxkVW9JK0ltMnh0MXc1cXVYRXpybEZJeHFYVTFGUjlIcmZ3VG5BZEpnTUJsYUpVY0hVa2FsK1c5bENvQm5wRFVqNGdqRVhGTUtWR3dMSUViU2tzSnZ6Y2lIcFFUQXU4dTZiZm0vQzFjakpkS3VtMU8vdnRtcFVITWtWSW4yRkRhdXVpTWN2WERVS3ArZUZSNTRET2ZuUHRxS2lZQ0FBQUFYZlJGRWZFaU5XM2dEZVhPQzl1N1crK3pwTEI5bFZnU0dBQUFZQkhGV2ZZQkFBQUF6Tjk2enI4bzFlSUdFZjgvZS9jZUozZFcxb24vOCtsS3FpWTFtUVJDZ2pNNHpMQmNGTVFiNEhLUjViS2djbHQrY2hFUmIzZ0JVV0ZGVUx5Z0NJS0tJb3E2eXlxZ0luZ0RVWEZCRUdWeEJVU0U1YVp5bFl2TU1NNk1KQVNTeVZTbUtxbisvUDQ0eitudjZVb242U1JWZGFxKzlYbS9YdjJxYjFWWEowOTNWMy9yZk05NXp2UHdjMGh6cjgrc0dOZE1TZnAzcE55TFE1TDJTZnBXdEt0QytiMlI1c3J6M1BsSnBIeVVrNUwya0R5WWkzRFptVGtKME93Q1JISmZEeW14YlJ3WjJIbG5hTTVLM2gzM1J3QjJ4SmNLcVlkNWVhSzZsdVJqSWlId0FJQkhBamcwbis5a1MrOUhXcnk4S0JML2Zvamt3ZmhjRjJtUk1tZlVkeWF5N1hjaldwN0ZSeCtwMHNsaHBJVEJEanhwWm1abVptYnRkQWVTYjQxcTRJTVlBMmVEdUliSVkrWXVVcVZ3VndFME16TXpXMHg1RFdVSWIydzJNek16TTZ0dGdKUm4wSWtDVFVPa3ZJdTlKSjhQNEQrcVJqYzd0NUwwUTNGOE13Qi9XREdXYVhzanlYOUF5aWtaeFdNanBKeVNNY2toQUpBY25lYnJyVUJKendid25OcUJuRTRrUkptdE9rcTZFNENIQXZoZUFIZWM4ci8vRGdEL0c4QkxTUjZKYkdyM1ZMZVZKbWxoSjNiOTNtaldDc1FXQzBpTGZPNHhzN1B6ZTNSMWxIUVNMZGp3R08wdjhnWXp2emVZelY4bnppZkw3dWRKL25UdElNeVdYQTlwWWJHTHRCRFZrM1JUM1pDbXgrTlhzK1d3elBORjBaN1JpL2JuTDE4VEV1bWxzTXl2aFIxd0Y0UTJvcVQxMmtHY3AvVjRYWlovVjU2SGFZRmxQbGVlRGNtMUpmNmIyMUp4VFpKYkFOc0YySEgycDVoWkxaR01keEtwaXQ2SEFYd1l3QXNubnBZbm9ucVNIZ3ZncTVGT2p1dElrMU0zUTZvbytEY2szMVo4WGE3U055cnU1OEczencxbVptWm1adHYzRXBMZlh6c0lNek16TTV1NllkeU9rQmFGaDJkNHJwbVptWm1aVlJUZFdXNEg0Sk8xWTVtRnRpVUFBdmhTQUpCMG9PaEthUmZBaVQ1bUMyeWlHbDlPMmh1alNkYnJTdG9acFUrSEpGOEo0Slg1eTdIMVRvViszSlpaMUwzNGQ0N0YvM3Y0MUM4ek16TXpNN010UEpIa2IyUHpwaG96TXpNemF3ZkdSdTFqMFdLc1RmT21IcnVhbVptWldhdVFQQUxnaUtSZkF2RGp0ZU94TS9wK2t2OGExMWtINC9aSTdhQ1czZEszeURGcnVUNVNOVDhnVGNxTTBFek9FTUFvRXZjVVBlOTd4ZGZ1aksvTjVWTzc4Zm5qYUJJQTg3ODF6QW1BOGZ4dVpNbWJtWm1abWRucDNUa1NBQ0hwNHRyQm1KbVptZG5VS1RacWowbCt2bll3VTlhcEhZQ1ptWm1aMlpSMUpPMG0rUk1BanAzMTJWYkxSMGorSG9CdUpQNTFuQUE0SFU0Q05GdHNBelR0ZW9rME1kT05qNTJTZHVjbnhtVFVFRTJ5M3lnK2hLWXF5VER1STc2MmsyL2puK25HNTBjK3lacVptWm1abmRiUEE3aUU1S2Z6QXhOVnZNM016TXlzUFhLM0ZVbTZyR29rMDNWRDdRRE16TXpNektac0hGMFVBZUR5cXBIWWFaSDhNcVRjbGN4VnlxZkU3WURObGt2WkNoakZHMWdQd0VrMDFRTExDb0NLeHp0SWxRV0hTRzkrdWZYdlpBYjg2ZG9JbTVtWm1aa1pjRE0wazBtamFBOTNVdExhRm1Ock16TXpNMXR1WGFUNTFyNmtuUUFlVWptZWFYcGo3UURNek16TXpHWmdGTlVBajBpNlA0Qy9xeHlQYlhZYlNmdEpEaEFkTENWZFR2S2F5bkcxZ2lzQm1pMDJGc2RsWWw2dUNOaUw1d3dCUU5LZWFBczhLcDZmS3dldUk1MUV4MGdWQVBmSHYxUCtINlBpYThyV3dtWm1abVptcSs3bEpJblVFdTRZZ0JOSWJRcU9BaGc0QWRETXpNeXNsZko4NllEa2NRQzNyUm5NbEgyZ2RnQm1abVptWmpQUUtRb2l2UlhBYjFlT3h4b3ZJbmtWeVVNQWppTnlVcHdBT0QxT0FqUmJiS2VyeUpjci9wMHNuak1tZVVOdVF4YkpnRUxURmhoSVNYK2RlTzZoNHYvSXJZYnovUlBZWEg3VnpNek16R3lWM1pMazl3RG9GbTEvMXhCVnVpWHRyaGFabVptWm1jMlVwTDF4T0Fhd3IyWXNVOWF0SFlDWm1abVoyWlIxa2NidC9lS3hINjBVaTAwZytYUTB2eHNCR0VySzExaWRyYi9Lem9XVEFNMlcyMlJ2OUkya3dXSnhzdnpjcG5iQ3hiRW1IbmM3WURNek16TXo0TmtrZXlRUG9ta0ZsMjJNbjEwRjBNek16S3kxT2lTUHhQRVl3Qk5xQmpObHYxazdBRHVyL2xrK3p5MGV5NFVBSmorWEgrdkdiVDR1UHovNWY1Zi9Ccy93WEpzTkZrbklabVptdGoxNS92WjQzUFlqYitJT2xlS3hFRjEyZ0dnQlhEeCtPQTRuYzEvc1BPeW9IWUNabVptWm1ablpnbGtuZVFuU1pGSGVQRGM2dy9QTnpNek1ySjNHU01sUGVkUDB6b3F4VEpzM2dpKytjb0UwSi9jQnpRSnBYdVBMM1gwbU4vdm5qVXpsaHFieXVtYXJUVTQ5U1R1MzJPaWtJb2JKdnd1YkRmOTh6Y3pNenQza1dHWU1BQ1EvSWVrWkFINjVYbWdyN1VxY3VzbmVac0NWQU0zTXpNek16TXdhOXlmWlFWcHdFNEN4cE50V2pzbk16TXpNS3BGMGNSeHVWWFZ0YVpHOG9YWU10aTFFU3J4YlIxbzBIYUhwK0RPTWp4R2FoREVpTFg3dmtaUXIvWTBBUU5KdVNmdWp1bHdIUUM4KzM4ZHBxZ0pLMmxNOGIxejgvellISkkvRHJidk56TXpPeFpEa2pYRk1wTEZTRjBDWDVBc0JYRnN0c3RYMVNwSlh3d21BYytGS2dHWm1abVptWm1iQTk1TjhTWEcvRXd1K08waCtxbFpRWm1abVpsWVh5ZlU0YkZ0VnJtSHRBT3lzaUZUTVl4MWJ2LzYyK3J5UUZyL3o3N2NIUUpMMmtEd0VvS3p3bDVQNUJtaVNYSWNraDVKMmt6d1cvODRRNlIvWkMyQWNsWFYyb1dtelo3T3hCbURrbHNCbVptYm5SOUlsMFFwNEtPa0F5WU1rdjFoUzI4YjFDNDNrNDRHMElXV0xhdE0yWlU0Q05ETXpNek16czFYMmZKTFBsTFFiYUNZakpOMDhGc2tRais4amViaGVtR1ptWm1aV3llRHNUekdiaWNuMnZrQlRGZTRFVW52cU1UWW5DT2JFd0U0OFp3Z0FjVzJUVzdEbGxyN2xkVTVPRkR3cHFRL2d3Wkp1Ri8vSEVhUVdidDhJNEhKSng3QzVrcUROeGhxY3JHdG1ablpPeWtTenFBallRZHJFY0xCNDJoMEFmTHhHZkt1R0pKRTIyKzl5QXVCOE9BblF6TXpNek16TVZ0R0xTRDREYWZHckY1TVFuV2kzaENJQnNJODBVZVFFUURNek03UFZRMFNDbGFUTEs4Y3liUnVKWUxZVWNxVytzbzFhZVp4YitPWld3ZU9jNEZmYy9pQ0FTd0Y4TDRDTGthcjVvU3lHczgzQ09MdlA2enV3OCtGRVN6TXpzM05RSkpybHpROWRwTHlvc3RMeEp5VTlHOERQMW9welJkeEYwbDZTUitMMzBvYzNXTTJja3dETnpNek16TXhzbGZ3bXlSL0Y1Z21Ia3dDd3hZN0VQREZCbUptWm1ka3FFcHBFd0srdEhJdXRuakpSYzYwNHpoWDhqaUZWK3hOU2haVTdBSGdJZ01jQytKcDRIc3BiTXpNenM1WWpnSjJSZkhZUXphYUpjbjVYSko4cjZXZlFiS1N3NlhvTmdIOGplU1R1T3dGd1Rwd0VhR1ptWm1abVpxdmcvaVRmaWMzVk12TGt3eGlwQ3VDeDJCRjZQQjQ3R2M4VG10MmpabVptWnJaQ0pGMGN5VlpmWFR1V0tib0dyZ0s0RE5hM2VqQ3FVbjZscEtjRGVPQjhRekl6TXpOYmFHc0FScm45cjZROUpJOEN5SnUvY3pLZ1NPNlV0T1Y0eXk3WTk4UmMrNlVrL3dOcERyNEhZRmc1cnRaekVxQ1ptWm1abVptMTFSakFmVW4rQTlJa3cyUVMzMkRpdVppb0JIaTZWbHRtWm1abXRpSkkzb2kwV1BpanRXT1pvait1SFVCTGRORlU0anVUc3NMTXVIaHNqS2hXRS84T3NMbmlueVR0QlhCdkFOOE80SEZUaU5uTXpNeXN6VFp0ZElrRVFLQ1pCOTRWeDNuRDk3MEF2SE51MGEyR084UTFWSi9rOVdnU0w1MEFPQWRydFFNd016TXpNek16bTdKZkFYQXJranNpQVJCb3F2cVptWm1abVoyTE5hUWtyNTIxQTVtaUR5TXRmTnFGR1NHOVB2cElpNXVNNDV6MDEwZmFqRFF1UHZMbnhraS9BeFgvamdDTUpmMmdwTThxOWZEOUFvQTN3QW1BWm1abVp0TXdrTFFiYVFOR2grVDc0QTB5MC9RTWtwK0k0M0pqeTI2a2NiSE5tSk1BemN6TXpNek1yQTJ1QW5CckFMY2crZU1rcjR2SE8vSGgxZzVtWm1abWRqNDZaMy9LMHZtL3RRTm9pVDdTNHVZQUtZRlBjWndUL0FhSWlpZVM5c2ZYaktPNlg2NEVDRWxmSnVuVkNnQmVET0RBUEw4Uk16TXpzeFd5RzJuYzFrTnFIZnl0bGVOcGk4K1RmQ0hTT0xpTE5BNG1zRkZkM1pVQTU4QkpnR1ptWm1abVpyYXNQb3JVR3VzU0FGOU84aHFTaDlIc011eEsyaFgzejlhaXk4ek16TXhzS3lmUXRMQnFCWkpYSVZXZnN3c3pLSTU3YUtvQWJsUUZqSVEva0R5VUV3RkpIcEYwRDBrZmo2Uy9Ed0Y0OUh4RE56TXpNMXRKSFpLZmorTUJBRWphQTJCdnZaRGFnZVErQUlqeGI5NEljMG5Wb0ZiUWp0b0JtSm1abVptWm1aMkRqd0w0YnBMdng2bTdCN3RvRWdESFNEczVSd0E2a3ZaR2dxQ1ptWm1aMlhZUnFYM1ZuV3NIWWdzcnR6V2J2RFlaQWdCSklGMm5qQURjWHRJL0FialYzS0l6TXpNenMwbEROT016a0J3Q0dFcDZNbEpGWmp0M2Q4Z0hKQS9HWVNjcUFBTFJFcGprc2ZtSHRscGNDZERNek16TXpNd1czVjhEK0NxU1BaSmZEZUREYUJiWnVrVnJyUk5JeVgrNS9WWWZhZUYyN0FSQU16TXpNenNQZVEzbGtWV2ptSTF1N1FCYW9JTjBYVEpFU2diY2FCMHQ2UW9BUFVtM2xmU0JxUGozVGpnQjBNek16S3ltdklGOEpHbDNIQThsN1NmNXZ3QzhxMUpjeSt6WkpEOEJBTVhQTkkrTjh6dzluQUE0SDA0Q05ETXpNek16czBYM0l5VC9HV2wzNXBEa1VhVEpneDVTdGI5RDhiemM4amN2YUE2S3gvcnpDdGJNek16TVd1ZTdhZ2N3UmNlUk5zcWNxQjNJc3BOMGNYa1hzYWdjQ1lEM2wzUVRnRThDdUZPRjhNek16TXpzelBJR2psN01ML2RKM3JObVFFdG9uZVJ6Sng0ajBpYVpFYkRSSHJnYmo5dU11UjJ3bVptWm1abVpMYm9QSWlZSll0SmdQTEZ6a05pOHlXMVVISGVSRmpnSHN3N1N6TXpNekZwbkhXazhlYnZhZ1V6Ukc5RnNsTEVMUVBLb3BIMUlHNU9PU2JvcmdEY0JPRkE1TkRNek16UGJXaGVwQ3VDKzZCeVRFOWFBTkgvY1F4cjdmN0pTZkV1RlpONk1Ud0NLT2ZzK2dJR2tQU1NQbHUyQjBWUml0Qmx4SlVBek16TXpNek5iZUpJZWhiUXI4d2pKNDhYanU5RlUzY2dmcFJHOHlHbG1abVptNTBlU0xxb2R4SlM5UTVLVDFKSk9mSnl1S2drbmJqdG9Lb3ozQUNBV2orOGY3WDdmQ3ljQW1wbVptUzJ5RWJBeGhnTk9uVGNla3Z3VWdLZk1OYXJsZEl1aU1yWmljd3dRbS9Ham0wL0pDWUJ6NENSQU16TXpNek16V3daL2hyUXJzd3RnSEJVQk83RzdzRmMxTWpNek16TnJKVWw3dDFpOFduYXZpR29jYnNmVmJDSVNtb1RBa3BDUy9pUnBUengzRUJ1UmhwSytMcEwvWGovSG1NM016TXhzZG5vQXVpUmZYRHVRQmZjaWtvZEozcGpiL1JhSmxWYVJrd0ROek16TXpNeHNLVWo2VlRTN05ZOGlkZzlLMmxrekxqTXpNek5ySjVKSEpIMXo3VGltNlF4VlQxWk9KUE5sWTZUMnowUktCdXhHeGNTeWtrbE9uUHlHU1A1Nzh4ekROVE16TTdQWk80azAvOXduNlUwenAwSHk2VWhqNHpISkl3QjJWQTdKZ3BNQXpjek16TXpNYkZrOExkb0tkTkVzV3ZaZERkRE16TXpNWnVpSGF3Y3daVDJrOGZUS0wyckdkUVRRL0R3VUgyTUFJNUlISXhHd0F3Q1NIaExKZjM5V0kxNHpNek16bTdteHBQMW9xai9mcm5aQWk0Ymt4WWl4Yy95TWVuQ3IzNFhoSkVBek16TXpNek5iSm4rRU5NbVFGeTFQVHR5YW1abVptVTFGdElDOVYrMDRwbXlJVk4xa1YrMUFGa3plWkVSSmUyUHh0eHVKZ0pkSDh0OGJLc1puWm1abVpyUFhJWGtvYm8rUi9CU0FYNjRkMUFKNUxGS0M1QmNENk1XbW1pR0FZV3pldDhxY0JHaG1abVptWm1iTDVFRXh5U0NrUk1BUmdENjgyOURNek16TXBpeGF3TGJKdnhUSGcycFJMSTUrM0k3aXRnT2tOdEN4K0R1UzlDb0FuNjRRbTVtWm1abk5YKzQyTXdiUWtiU2I1SS9WREdpQnZKSGtuMGphUy9JYXBERjBSOUplQUNCNXVHNTRCamdKME16TXpNek16SmJQMjR0alN0cFJMUkl6TXpNemE3UCsyWit5VlA0VTZYdnExQTVrUVd4VUU0L0tmNzEwcUwyU0hoelYveDViTFRvek16TXptN2RORzJWSUhrY2FJMTVTSjV6RlFmSmhTQlVTajBqYUxla1NBR09TUitJcDNZcmhXZkJDaVptWm1abVpUZE43a0twTGZBcHAwOUZGQUc0Q2NBTEF4UURXNjRXMkVrWUE5Z1A0RDZRRnJYc0JlR1RWaUdialZwSytoT1RIQVNncXRIVGdhb0JtWm1abU5rV1NubEU3aG1raStkemliZytwZGRjcU94RzNKUGw1QU9OSUJ2d0VnTDMxd2pJek16T3pTaGkzUWxRREJEQWlPWlQwYUFCL1ZpMnl1cTVFdW43b0FCaVFYQWR3TEQ1SEFEdlJWTmUyaXB3RWFHWm1abVptMC9TWHNiQ2syb0dzcW1oUmNCeHBrb0tTYmdTd3EzSllzL0F4Tk5YdHZZQnBabVptWnVkRjByNmlkVlVuUGtaSVk4em4xSXByUnZLNHVZUFZHVDkza2E2TjhvYWhQbEtGbDN4THhQV3JwUHNDZUd1RkdNM016TXhzTVdqaSttQWRhYXhJa244cDZjMEF2cjVlZUZVOG1lVFZFNCtWRlJNRkp3QXVETGNETmpNek16TXpheEdTeHdCMEpPMUZ1Z0QveXNvaHpZeWtleUV0M2cwbDdhNGRqNW1abVprdG54Zy9aK3RJQzFoRU81UGsydmc5blZaY0k0d2tsWnVpQmxIdGJ4RFAyUlB0ZjYrR0V3RE56TXpNVmgwakFiQW5hUTlTaFRzZ0V0MUlQcUphWkhWOEVzQWZBRUNzTjlpQ2N4S2dtWm1abVpsWlM4VEVCSkFtSkc1Q21yVDRCSUFqRmNPYXBYZElXZ01Ba2lmTzltUXpNek16c3dsRWsvUUh4SnFKcEl1THNYVmJYRnNjcjBTWEtKSzVJa2xlQzJNOGZxallSTlFIOEFVQXQ1cHZkR1ptWm1hMmFDUmRISWNka2tlUk5wVHNqZ1M0TG9EakFHNVdLNzU1STNsN2tqZkdjVnZYR0ZyRlNZQm1abVptWm1ZdFFmSm9MR2IxQUp4RTJxSFlBM0I1MWNCbTY0Y1IxUUFyeDJGbVptWm15eWRYOXVqR2JRY0FTQjRIOEtRcUVjM09MOGR0cDJvVTh6VUcwblZTM0ZkTzdpUjVUTktUc0RrNTBzek16TXhXV0ZRSjcwckttMmI2Skk5RkF0d0l3SzZKU3VLcm9DTnBYKzBnYkh1Y0JHaG1abVptWnRZaU1Ra2h4SUlYZ0dFODlzNTZVYzNVODVCYWVua2l3c3pNek16TzFSZ0FKT1Zrd0JIU0pwb3hnQmZVQ21wRy9xQTRYcFVOTkdORTlUOUp0MGRUMFFXUzNnZmd0eXJHWm1abVptYUw2VVNNR1lsbWpyMkh0QkY5SU9sa3Rjam1UTktmQXhpVFBDenBRTzE0N095Y0JHaG1abVptWnRZUzBaWUFTSXVYUUtyeTBRZlFJL20xZGFLYVBVbS9TUEp3N1RqTXpNek1iT21zQTV2YXhnTE5XTHBWU0I1Q3VqNVlyeDNMbksxSnVwTGtKd0NNSmUyUmRCakFYV29IWm1abVptYUxKYnJzcUhob0NLQWZDWEFEU1crcUUxazFqNVQwVlpKMmt6eFlPeGc3T3ljQm1wbVptWm1adFVTMEpVQzB1T29pTFhMdFFGUHA0dzlyeFRaalA0NjBHOVBNek16TTdGd0lxY0pIbWZnblNWOVhLWjZaa25ReDB2ZmNSVlRJYXp0SkY1TzhDczMzZXdUQXpTdUdaR1ptWm1ZTEtqcnFFR256ekJvQVNGb2plVTFjSXp5b1pueVZ2QmZwK3NHV2dKTUF6Y3pNek16TTJxTURBTkd1NEVSeERBQjlrdDllSzdCWmsvVG0yakdZbVptWjJkSWhtbldTTHBxTkpRK3VFODdNdkhHTHg3VEZZMjNEdUI3cVNMcEMwaXA4ejJabVptWjJZWFlodFFFZUkzWFlPUmFQci9MODgrZmdUZmhMd1VtQWRxSEtQL1FPTnU4ZTdNVHQ1SzdDN3NUbk9zWG5laE8zWmpXeHVDMlBKMSt6L1ltdnljK2QvSnNnVG4zTm01bVptVTNUdURpZVhPQWF4TzFMNWhUTHZOMUgwcVhSbW1GRDBTTFp6TXpNekd5U2tNYlFIUUFqU1R1UjV1OStwR3BVMC9jc3BBWE1vd0FnYVZmbGVLYWxzOFZ4T1NlN0N3QWszUkxBcCtjWGxwbVptWmt0c2VOb2NseEdBQ0RwaHFvUkxRQkpyNGpEY2d4T3BBMDNub05mRUR0cUIyQkxiMWdjcjhjdE1URjVFby9uUktrQmtQcXBGMW5UbUhpdTRFUXBxeSsvcGljWDBIdEliLzVDOHpmUVJUcW5udTcxM1l2bmppVHRJM2w0WmxHYm1abVpuWWFrdlNTL1g5S1Rhc2N5STllUkpBQkl1b3prOWRFaU9XL0dHSjd4cTgzTXpNeHNGUkZwTHJzL01aL1hHaVRmaDJLK1BjYkliVEFHQUVrSFNCNk02NTBqQUpnZmkrZGRXeTlFTXpNek0xc3lPOUhrclVEU2J3RFlYUytjaGZGWVNYOUE4aS9SNUQ0QXdMaVlnM2ZsN2NxY0JHalR0SWIwbWpxSnBnSkpwempPU1ZPUWRBV0FlMGw2RElEN0FkZy8zMUROTHNpN0FMd2J3TjhDZUJmSjY1QUdBcmtLb0dMQ3NCZVA1emU3L01ZM091VmZORE16TTV1RFlySHZnUURlVWpPV1daRjBWNUlmSkhrOW1uRll1WG5Eek16TXpLeVVGL21HQUNEcHNYWERtWmtkU0p1ZTh4aTVpK1dmcDh4enNVY0FkRWdla1hRRnlhc2pLZkMyQUQ1Wk9VWXpNek16V3g3ZDRyZ3ZhVCtBLzE0cm1BWDBlcVFOTnp0SkRpVmREQUFrajJOemx5S3J4RW1BTmcxRVNnRE1mZEZMdVR6cWZnQ1BBUEMva0NaVnpKYlpQZUxqdndPQUpBQjRQNEFmSnZtMmVFNXVhYjBUd0FrMGk4Njl0dTRvTmpNenMrVWdhVC9KdjQweFRCdTlGMDM3THlCVkpCK2M1cmxtWm1abVpubGpiKzVzODZxNjRVeGRtUVFudEd1anNzcXVLOUdkNWVvNC9tcWtPVnN6TXpNenMrMHF4OGpIQVZ4Vks1QkZKVW5SamFjTFlJM2swWGg4c2xPaVZiQldPd0JiZWowMENZQ1RPcEtlcExTNmVCREF5K0FFUUd1dnV3QjRxNUpQU2RxSHB2M3ZKWk5QbG5SZzdoR2FtWm1aQVYyU2g1QVM0eDVVTzVoWmtmUlFOTzNPQmtnVEVqejlWNWlabVpuWkN0dllIU09walcyK2ZnSnBQSnczS2JkcU4xQWtBUFlrN1NGNVROSStTWHZnQkVBek16TXpPdytTOXNidGV1MVlGcFdrVjhYNCt5aFN6bERmQ1lDTHdVbUFka0VrOVJBSmdHVlNrNlNYU2pvSjRMZHF4V1pXMFg4Q2NHMGtCTjZQNU5HSkNVU1NQRmdyT0RNek0xdHBJNlNMOGdISnY2a2R6QXk5QWFuVkdZQ054ZHhXTFhhYW1abVoyZFNNRVJYbEFEeXlkakRUUnZLMWFDcWE5TTcwM0NYVVJkcjhNOHdWU0NJcDhFalZxTXpNek14c2FaRThJdWszYXNleDRCNEw0SEpKbHdFNGlWUTEwUmFBa3dEdGdrUnkwMlZJTFU0UFN2cnBxUHozeE5xeG1TMkl2NHUvaVRzQmdLU0w0QVZvTXpNenEydUl0RmpXQTNDcnlySE1qS1JmeXNja2I2b1ppNW1abVprdHJOd0dHRWlMVnkrdkdNdXNiSFR4a1ZSMjZtbERwZXdkaU0wL2t2WkkyaDNGQ2N6TXpNek16a2RIMG40QS83MTJJRXZnL1NTUElEWlZvWDBianBhU2t3RHRna1NKeitza2ZVTWtPajJ2ZGt4bUMrcmRrZ2J4Umdpa0ZueG1abVptdFl3QWpLSktSbHM5QTgzQzVnQ2VoREF6TXpPejArdmtTbkl0OHc2a01YRUhBSW9XWFVRN05pb1BrTDRQSWlVRC9oemllelV6TXpNek93L3JBTnpSYjVzazNZam1lbU5ZT1J5RGt3QnRHOG8ycHRFU0FaTDJBQnVWQUQ4TDRIV1Z3ak5iSnJ1aVJmQTNJNVhFelF2UkhSU1RjWENDb0ptWm1jMVdtUXdua2p1cVJUSmprdktpWnhkbm40VHdHTXpNek14czlXd2t3a2w2UXMxQVp1UkpNWmVmcXdIbStjZGxUQURzb1ltL1d6d0dwTy9uY1FDZU91K2d6TXpNekd4NUZMa3Z2VElQcHZqOGRYTU9hZWxKZWo2SzZ1TklZL1NOM0lmaTU5eUZ6WnlUQU8yc2l0MkJpRW9oM1VqK3UxdFUvenRRTHpxenBmUnFTYThITU15VGNGRldlQnozQnpuUjFzek16R3pLK3BMeVF0bE9wSXFBWXdCdnJ4ZlNUTjBMYVVGd0ZPT3RUbngwNDZPc0VqS1lmM2htWm1abVZsbGVpQm9EZUZuTlFHYmt1b2tLaCt2RjhUSzBBeVkyYitvWngvR0plSHdvYVora0F3QmVXaTFLTXpNek0xc0tKRytNdzJIa3dXeHNtSmYwWkFCZlZDV3c1ZmJqa3I0NmpuTkZ3RFhFdFVmeE14K2YrcVUyYlU0Q3RMUHBBb0NrdmJGb0JnQTdKTjBXd0h2cWhXVzI5QjRtU1pGUWV5bkpnMENxcnBsdVd0bCt4TXpNek9vYkZPT01FWnBGei85V0taNlprL1JaU2J0SkhrS2FhQmdqMmlFalRVVGtxc3htWm1abXRucEdRTk1CcDIxaVUzK3UramM1NXQwNTUzRE9od0JJMGtWeHY0ZjBPeE5pZlN1K3g4L1dDYy9Nek16TWxvd2tIY2dGZWZLR2VVbVhBL2lmVlNOYmJ1K1AyL3p6M0pWdXREZHU5OEZKZ0hQaEpFQTdteEdBSHNrakpBOUZNdUFqQUh5eWNseG1yUkRWTlBkZzgrTHpNcmJqTURNenMrV1FrLzV5QmJ3ZHdNWkdoRFpXUGdGUzVmTGQyTHJkcjVBU0FkZmdSRUF6TXpPelZVVUFMNm9keEF5OHBEZ21UazM2VzRaRk9BSUF5U0VBU3NyZncwWlZiMG12cWhTYnBXc3BmOHp1QTBpVmRJYmIrbTJZbVpuWmR2UklIb3hDUFFkSTNoQ1BmNlpxVkMwUWVROERZS1BiYUova2tiaC91R1pzcTJSSDdRQnM0ZVZ5bmIyNGZSQ0FQNndha1ZuN2ZFelNiVWhlSC9lSFNIOTd5ekFSWjJabVpzdGxQSEU3UkZwWTIwWHkreVE5c1U1WU0vZnZhRFpkNUlYRFVkd0tIbmVabVptWnJhbyswa0xWZDlZT1pBWmVpS1oxcnVLMnRIN0tWeXllWFVpL255R3dzWmdJU2JjZ2VaMmtPd0o0Yk1YNDJ1SWpBTjRFNEFNQTNoaFYxRXRFMmpnMWVkM2tqVlN6dFFaZ0hCVjB2bEE1RmpNenM3WVlTdG9iUmJBT0FvQ2tUMWVPcVRVay9TTEo1eUtONFFlU3JpQjVkWHc2WDN2WkRMa1NvSjNOUnFLb3BLY0JlSFhGV016YTdOTm9kdlVSWG9nMk16T3oyU2pIR0wyNHZ4UEFjYVFrdWVmWENHb08xaVI5TGRMaVoyNEZUSGpSeXN6TXpHelZEU1hkdm5ZUXMwRHlFMGpqL2R4MVJQR3hUT1BnQWFLbEdJcVlTZWIydngrWmUwVEw2Nk1BbmduZ0xpUjdUSGJFN1plUmZEckpWMFlDWUVmUzd1SnI4OGFwVHZIUlEvT2E4c2RzUHNZQXVpU1BuK1ozYW1abVp1ZXVTL0tJcE5zQ2dLVHZCSEJsNVpqYTVNY2xYU3pwQUFDU3ZGclNia243NFFUQXVYQVNvSjNOTUhxaWZ6R0FYNjBkakZtYlJZbmNycVE5dFdNeE16T3oxdW9qVlFNcFcybU5rSVlpdTBqK2JMM1FadTRka3ZZVjk0WE4xOFFkbUptWm1kbXFHUVA0djdXRG1JRjN4dTJaTmhyckRKOWJOQjFzYm1jOGx2U250WUpaRXM4RGNEdVNhMFdpMy9OSmZnRHBHakJ2Q2lQUzllRnVOTlhUeDFGMXNZc20rYktEVkQxeUhCOXVVVHNIa25haHFXSnZabVptRjI2RTFCTDRVNUt1QVBDSzJnRzEwR2VqeXFLQVZNMmI1T2NxeDdReW5BUm9aOFA0QS8xazdVRE1Wb0drRDVNOGd1WFpqV3RtWm1iTFpZQkkrc3V0dEFEMEplMkoreWNCUEtSYWRMTjNUMG1Ybitaenk5QU96Y3pNek15bXF3UGdkT1BEWmZhVFNBbGNRUG9ldTJnMnZlUXFZOHVnZzVSc05rYVJDQldWV3g1ZEs2Z0Y5UW9BZDJEalowaCtDdWwzM2NQbUpFcWdTZUxySWwwZjNvaW9QSWMwTjkxRlhEc1dYK05OVlBQbE5RSXpNN1BaT0luMFBudFY3VURhS29vZklUYWE5SkhHbFAycVFhMElKd0d1dUxLayswVDFzVnpTWGZrUDFNem00bmFTWG9pWVhJa2RDSWpqdllnTGYxY0xORE16c3lrYWtEd2F4Mk9TYjZvYXpXeTlBY0FYaXZzN0tzVmhabVptWnZOUkxqU3htRlByQVlDazM1eC9TTE5IOHExb0VvaHlBdDJacWdJdXFqR2FhdVlsRnkxSVhnemdaaVFKNENuUkFobzROVUZ2aU5OWGs4dkpnQ3J1YTR2bjV3cUE1WDJiTFVYQkFETXpNenNIa1FQRDRuNitCc2liWThhUzNsd2p0bFVpNmRsRklZSXVVb0dDWHZINVBkZzhicDBjODl0NWNCTGdpaU41TEovMFNONEFiUHl4alpGT2ZpK29HWi9aaXZvUlNiY0hBSkpYUi9JZjRvSi9KNEJPc1ZCdlptWm1OazE1a2ZSK1ZhT1lyU2RJdWpTT2g4V21DMjkrTWpNek0ydWZBWUJlekhrcjV0UjZTT1BBM1FDZVdEVzYyZmhNM0xhbFhXdXVaZzRBWFVrUHJ4bk1BbmduZ0ZzQXVCbUFuOXNxU1N4YXlKcVptWm10b200a25tMk1oK0lhZ0VnNU1KVDBLQUFQckJUZktubE9WUEF1eC9NYjF5anhleGtqamZGM3c1dE1wc0pKZ0FhU0orTndaN3JMbzBoL2FIY0c4SXg2a1ptdHRJL0hMV01pcDh4ODl4dWdtWm1aemNvQUFFaStIZTFaTkp6MElwTFhJeVU4a3VUVjhYanZERjlqWm1abVpzdHJTUEpvTEN6MUpGMkVOQmI4a3NweHpjcTMxZzVnV29vcUxwMjRQUUhnZFZXRHF1ZFowZWIzYTBuZVJQSklYTmRBMHU2aXlncElydGNMMDh6TXpLeXFFZEpZZjRDMHZwN0hrcmtMM3lVQS9xeGFkS3Vuck9EZEFWSlJzcUlLWUFmQUtNYXl6b0dZQWljQldnZXgwQ2VwaTNUeTZ5Q2RIRDlZTVM2emxTZnBHV2dxMG93UTVZbmp2aGVwemN6TWJDWmlvVTBBN2xrN2xsbVI5TnBjRGFaOHVGWThabVptWmpZekd4dHJTWTRBbkNSNVJOSU9BTyt0Rjlic2tIeDNIQzc5L0dFc0J1Wnh1aVQ5Y3MxNEtubDZ0UHY5UFRTVjI4ZElyKzArZ0Y2WkFCanlvcmVabVpuWnFzbHRaN3RJNit0QzZvQzVPejUvc0ZaZ3EwclM5WEc0RHFRS2dFVVZ3SEx6aXNldlUrQWtRQVBpd2pGZktFcTZ1YVN2clJ1U21RRjRBUUJJT2xBOGxwTUEyMXFaeDh6TXpPcnE1T3NDa2g5QWUzZmZQUUxBUGpTN0QzZWphVWxnWm1abVp1MHhpczBmUUJydjVmSHR6ZXFFTTNQL2h2UjlzbllnVTlSSDgzdjdrWnFCek5tTEFOeU01UDhDQUpMWElOcGJveW5rY0J6RlBMR2t2V2dXVDMxOVkyWm1acXRvSk9seXhGaEkwajRnNWNKSSt2T3FrYTJ1TDVMMFhVaWJlblpQZkU3RjlWcGIxeUxteWttQU52bUgxQ041Q01BN2FnUmpacHRKK2dlU2VVZkNpYmp0bis3NVptWm1adE1nNlRJQUlMbWpkaXd6OUQ0MDEwTytOall6TXpOcnFhZ3lBYUJaQkFUd29Vcmh6TnAzQWFuRkZscXdpVGlTMm5Jbm8yZFhEbWRlRHBLOGlPVFRTUjVCcWw3RCtPZ2ovVjRIUldYei9Ea1VGVlhNek16TVZoVkpYaVBwaXJoek9OclAzZy9BSXl2SHRzcGVMdW5Lb2pEWlpUaTE4cC9Ic1ZQZ2hRNEQwbTR4QUlDa2l5UTl0Mll3WnJiSnZTVGRGVkdsSmd6UnJ0MjhabVptdGpqR0FQb2tyeXQyNWYxdHpZQm1xQ2ZwQ2ttN1NkNVlPeGd6TXpNem00azhwOVpIV2hBOExPbjJBQ1lyVUxRQ3lYY2h6UnUyWWdHdFdDVGNBK0E1ZGFPWmk4ZVF2Q1VpZ1RPKzc5ekdiaGVheE01T1RtNlZkTEdraStOeG9Xa1Y3UGxqTXpNelcxa2tyMGJURWZNb2dMK3JHcEFCd0tjbDdRY0FrcmxGTUVqZWtBK3JSTlV5VGdJMFNMb2tEbnV4cyt4Wk5lTXhzMU84RjJueUp1L3N6TWRtWm1abVV5ZHBEZGhva2JDZjVBTnJ4elJEVjhYQzRoaWJOMTJZbVptWldUdXN4KzBBd0U2a1Zxb2ZyaGZPVEwwQktVbHNaNHpsMjVEb09JN3Y0OHRxQnpKai84SGtUMUVrcmhaVkxQdElyK0V4Z0U2UjlBZVN4MkpUVXcvTndtbE9IRFF6TXpOYk5SdnRaV09ldXlQSjQ2TEY4WGZScmpuL1RvaW1JdURPT2lHMWk1TUFyZHd4dGxQU1g5WU95TXhPSmVtaCtUQnVlN1ZpTVRNenMzYUxCY005Y1h4STBnRUFUNndjMXN4RUt3aWdXU0JtOGJrOFliUjMzbkdabVptWjJWVGtUYlZBU2lpN1BkcTd1UFRka1RBM0FnQ1M2MmQ1L2lMb24rMEpzV25ublhPSXBaYm5rN3kwdUorVEFNdDJ6b1BpZUZ5MnVBNks1M3VCMjh6TXpGWkZIMDN5MktiTjNjVllhVTNTaStjYWxaM05uUUhjTzQ1ejRTTWgvUTVIdFlKcUV5Y0IyaGpOaGZZK0FBK3JHSXVabmQ0YkFIUmpJcStEelpOQVptWm1adFBTQlRZbVN2THhRUUIvVXpPb0dmdTd1TjBWdDBMNjNydDV3b2praVFweG1abVptZG1GNjhaSEIya3UvSU4xdzVrZGtnZEpIa2VSOUZnem5tMHFrOXM2MlB6NzZnQ0FwSytlZjFoejh4aVN6NHpqUHRMOGIxN01Yb2JmbjVtWm1Wa3R4OUVramVWeFU1a1lDQUIzQVBDa2VRWmwyL0lxU1hkRWs2czBnc2UrVStNa1FPc0FHRVJpMFh0ckIyTm1weWZwWjRwMmRXWm1abWF6TUVLcU9GenV2Q1BKcXdIOFNyV29aa3pTYzVFV0lQT0M2UWswWXk0Q09Ga2pMak16TXpPN1lLUDQ2RVhicWJaNlpkeU8wU3g4THNzbVlpSmRmNnlqK1gyTjBZekhmN2RTWExOMnQyai9DMG43a0s1SFJua0RVa3ZhT1p1Wm1abE5YWFJ0eVJXUSs5SE5wWWZOaVlFRThKNEs0ZG4yZkFRQUpQWHp1TmZkZUtiRFNZQzJJMjd2RG1CL3pVRE03S3grcWpqdW52WlpabVptWmhkQTBrVVQ5eStKdytmTVA1cTVlUmJTK0NxM2hoT2E5c0JDU2dyMCtNdk16TXhzK1JCcFBEY0E4Sm5Lc2N6U0Q2RVpyeTdUQmhZaXJWT3Q0L1N0Yk84eXYzRG01bllrMzRlMGFMMmI1SkY0dkpPdngySXp1Sm1abVptZDJTQzZ1WXl3T1RId3hvb3gyVFpJdXA3a29SajM5b3N4c1YwQUp3RmEzZzM0bHFwUm1ObTJTUHJYdUwzb2JNODFNek16T3crOXVOZ2VSeldLZnRFUzl4aUFoMVNOYm9Za3ZSTEFLSGFPWnIzaTJDMkJ6Y3pNekpiUFRrbVhTcnA5N1VCbUtjYndlY1AvR05GS2R3a0lLZDR5QVRDM0JLYWsvMVlscXRtNkRjbFBJYlUrRytUT0w1SjJTOW9WTFozTnpNek1iR3Q1L25xeWN2S3VQSzhyNmZzQTdLb1IzQXhjQStEZXRZT1lrUytTOUQxeFBKaVlsN2Z6NUNSQTYwbjZ5ZHBCbU5tMjNVSFNYZk5pdkptWm1kbVViVlFOSVhrVFVzVVVJQmJoU1A1MWxham00N0Zva2g1N1NBdVIrZWV4RTZldlRHSm1abVptaTJ0RThub0FINjhkeUF3OUtHN0xDb0E3a0tyc0xSUEdSMjRKTEFDdnJ4clI5RDJJNU5WeFBJaVdaNHhxZ091UkVEaEN1djVhbGtST016TXpzM25LUmE3NkpFY0FFSnZaaHlTUFNyb3pnQmRWaTI3S1NONGV3RDhEK0pYYXNjekk3MGc2Z0pUY2VVUHRZTnJBU1lBMkJQQUx0WU13czNQeTN0b0JtSm1aV1d1TmtSYmVlbWdTQUhOTHFwd0U5MVUxQXBzSFNSK0l3N3lBbWxzQ3V3cWdtWm1aMlhMcVNucEE3U0JtaWVUZnhNSm5PV1lkWWprMnNaU0pibXNvWW83dnFVMmVRdkp2OGgxSmU2S0tqU0w1YjFBOGR4d2ZabVptWnJZWmdZMnVlU01BSUhralVtWGx2UUErV0RHMmFic3pZcXhJOGtkckJ6TkRuMFdUM0drWHlFbUFLMDdTUjJySFlHYm5UdExEYThkZ1ptWm1yVlJXd09zaExjcU5vem9la1NZZFBsb3h2bG03ZzZSTGkvdTViWVRnU2h4bVptWm15MmdFNEMyMWc1aWhkd0Rva0R5TU5HYk5HM3FBVkUxdTBhMXY5YUNreXdIY2M4Nnh6TkluU2I0NGpuY0NRTkhwSmYrZUdBdlhRRW9BWEliZm41bVptZG04NWJIVWpRQVE0NmRodEFZK1dET3dLZnN4a3A5R0pEcEsya3R5MlNwOWI1dWtmOFp5YkdKYWVFNENYQ0hGQlNRazdaRjBHWUE3Vmd6SnpNN2Y2eWJ1OTA5emJHWm1abll1OG82N2NSeVgxU2R5SXR3SkFMZVpiMWh6ZFIyYTczc2dhVThjdXhLSG1abVoyZUxaU0tDYU9BWlNVdFZ6NXgvUy9KRDhMemgxeko3SDlLUDVSM1RPVkl5M2dmZ2RrcndHd0J2cWhEUjlKTDhVelNhckVacEVUYUQ1UFNrcUEwNCticXZMaWFCbVptYW55a2x4RjhYOS9INzVQWWdFd1JaWUovbXJhQ3BGOTRvTkpOOVhLYVpaK3dwSlR5anViNHlYaXp5bjFpWkJUcE9UQU5zdm4vVDZKSS9rQytySWpMNjJYbGhtZHFFay9VTGM3a1lhQkhRaXVYZHd4aTgwTXpNek8zOWpwSVhGRVlDUFY0NWxaaVI5ZzZRcmdGU2hJMXFSdVJLZ21abVoyZUlab1ZrTTJraW1pbmx3QVhoV2xhaHN1MWdzYU9ZRU9hQmRDM3pmZ1ZNM1dRMnhPUkhRYkN2bCtjM016TXlTUGdEa3pST1JBM01GZ0Yrdkd0VVVrZXdndFRlK2JUdzBSRlRKSS9reXBHcmdiZlF5U1hlTjNJY2hnSzZrL2ZFN1BnQlhDdHdXSndHMjN3bWtpK2NCbWd6aHJxVEgxdzNMektiZ0o0dmpMdEt1Z092aXZpY0h6TXpNYkZiNkpLOGorZFcxQTVtaHZ5WjVkYjRUN2RYTXpNek1iTUhFWmcxSnVoaHAzbnRqRTd5a3RsZHl2bC90QUtZZ1YydnBvMGtBN0VxNlY2VjRwdTBHa245UTNDODd1TGpTbjIxTG5PZk16TXdzR1FPcFNFNGtpNDBBWEZVM3BLbDZiTngyU1g0cWp2UG1rUTRBa0h6QTNLT2FuL2VTUEJiWGRTT1NoNUIrRm0xcTlUeFRUZ0pzUHlHZENEdlkzTnJyZDZwRlpHWlRJK2tMSkk4QkdNVmtwNW1abWRtOERBQzhxM1lRc3lMcG01QTJWaERwZXFydGk4aG1abVptUzRma1lVbFg1dm14WWhQODE2UGw2eDhrMzFZN2hpbkk3ZHpLM3hVQlBLTk9PTk5GOHVaUnRRVEFwdStUY0NVVE83c08wdXZrSzJvSFltWm10a0NHa3ZhUVBCYkpZbGVmL1V1V3hxdEovb21rTDBFYUozZVJ4bzFEcEhGQkorNmZBSERMYWxIT21LVC9RL0prM08waTVVSHNQZFBYV0tQVkY4RzJ5WTU4SU9sMU5RTXhzNm5hR3dPQlhyVDVocVJMNFVra016TXptNEhZWFRtSTJ5N0pObFFmT1ozWElGV1YyWStVQU5nL3kvUE56TXpNYlA3NkpLOUNXaERyeG1NRThGZjFRcHFMbjY4ZHdCUjFTSlpWOFlZQUhsRXBsbWw2QjRCeFdiVWtGcXAzSTgzZHVwT0xuVTFlMTd0NzFTak16TXdXU3o4Mi9uUWtQUUhBcldzSE5DMGt2d1ZwemY5ZjQ2RWRTUFBUZTVEbXAvT1lXVEhHZkdxRk1PZmhnWksrQStrYWI0UzBEbkVFVFVWRU93TW5BYTZHUHFKbmRody90RzQ0WmpabEg0czMvNXo0ZDZ4bU1HWm1adFplZVhFdUZxOTJJVjFuL0VyZHFHWkgwbThWaTNhdUJHaG1abWEyWUNUdFFFcW1HaU5WaU5najZZMlZ3NW81a3MrcUhjTVVyU010N20xcWM3YnNTRDV3b21KSmJ0K1c1MjY3cDM2VjJTYTV1OWM5cWtaaFptYTJXQVpJQ1lDWEFYaFo3V0NtYUMvU2VIZ0liQlQ5R2NUbkpzZU5mVW03U2Y0R2dBL01MY0w1K2kxSk4wZFVBb3pIV25HZE1HdE9BbHdOQTZRVHhralNqYldETWJPWitFWUFrTFEvSnBJOGlXUm1abWF6c0ZGNm4rUk5TRHNUZjdSeVRMUDBKQUNRZEFXYUJSZ3pNek16V3hBa2owcTZCYkJSdGZvMkFCNVFOYWpaZXlmYTB3VWt0OFhkcUlvbjZTSDF3cG1hendBWWtqeFNKQUt1eDJzVUtCWjR6YmJodjlVT3dNek1iSUgwa1RZQWZhWjJJRlAweEtodU9FS01pMG4rUnhRQjZwQThKR2tmVWhLY0FBeHloV21TZDZrWDlzd2RCTUQ0T1FEQThackJMQXNuQWE2R1BsSnY5UHZXRHNUTVp1WmxBRUR5RUpyU3VHWm1abVpUVnl4a0RkRlVIUCtsdWxITmpxUVBrN3k2V0xBek16TXpzd1VoYVU4c2l1Mk9qYkgvVkR1bVdTUDV0Y1ZDV0Z0MDBTVEZQYXBtSUZOeWY2UjFtVTRzNkFMQXpxSWRzTmwyZGVEV2QyWm1acVdCcEhmVkRtS0sza1h5dDlGc2pwR2svVWd0ZjQ4aVZjM3VranlNNkZRVENZRWd1WTQwVnJoVmxjam5RTklmazd3QlRRS2tuWVdUQUpmZlJyV3Z1UEJuSEpjWGtnT2tDODYzempjME01c25TYStMdy9VdFByY2J6Zm1pUDdlZ3pNek1yRzF5aFk2eTlQNkk1SE5yQkRNbmR3S2FWc2lJQlppOEV6TStYSVhaek16TWJBYnlQUGZwRXFkaVlhd2J5VlZ2bTJ0d2Rid1cyUGkrMjVRWVZJNjF2N3RtSU5OQThsT1MxcEFXYXZOaTVTZytkd3l1QW1qYjAwVXM5cHVabWEyWVRYT3RFM2t3VHdCdzl4cEJ6UUxKKzhWaHQzanNVUEVVWVhQeEgwWkNZTDRXR0pPOEhzQ3paeHBvUFkrVTlEaHNZMHpVd28xUzU4VkpnTXZ2QkpBbVFlTENYMEM2a0l5SmtaNmszWktlVVROSU01dUxoK2VkQVVnRGhYN1JydThZb29Td3BCMFZZelF6TTdQbGxxODNEc2Y5Ymx4Y0R3QjhTN1dvWmt4U09kbWk0dnBySFdrQ1l1U0tIbVptWm1iVEYzTmFHN2VJT1M4QWtIUUYwdUxYU05LakFOeW5TcER6OVlTNEpkcVJTQ2FrMytGT2JLNEd1TXllQVd4NnpacWRyeEhhbGV4clptYTJYVG5oYncvU2hwK2o2YTYrRXRFZHJ5WHVnRFQrN1VqYWlYTXI1RE5FbXBNSDBwajZaUUJ1bUc1NEMrTVBKd29lNWZGUnY3amZLeXB3cnpRbkFiWUV5WTFrd09LeFl3Q0dVYkhpT1pWQ003UDVPaGkzSXdDRGZHNElSQ29kbkV2bW1wbVptWjJQYm5FN3loZlhKRjlkTDZUWmszUjdwSW1GRWNrYmtiNy9YTldqNDBVK016TXpzOW1ZcU9nd2lzZDJrN3c2RnNzQTRNL21IOW5jL1VleEdTZHZBbTZERVZwVTdZemtDOUdlMzQxVkp1bExhOGRnWm1ZMlQ1SHZNcFMwTCthZFIyaVN2ZjZwWG1SVDkzU1NuMEJhc3g4ajVXNE56dndsQUU2OUR1Z2dWUWU4RHNDWFREM0t4WEVEbW8zNHc2SXdBU1RkR2lrcDBtTndPQW13VGZJT3VmS0ZuVE9rLzNIKzRaaFpMWkx1aktaVjMvRzQ3VW02SkQ4RmdLc0JtcG1aMmZuZ1ZzZDVWeWFBdTh3OW92bjVPTkxFQXBGMm51WnJMMHE2dUY1WVptWm1adTFHOHFpa0EzRzNpN1R4OVZnc0RCNkxxczJyNE82UzlxRVpoN2RoZnErUE5GZTVqclNvOTdXVjQ1a1dudjBwWnR2eXlOb0JtSm1aelZPTTcvZFB0THdkU0hwWHpiaW03RE1rWDRUVVpXY1hrSzU1c1AwaVBwUFhBVHZqMzdnZXdNT25GdVdDa2ZUYWVIM3NLYXIrOVNPWnNvY1diU3k2RUU0Q1hINjVYSDRYQUVoK0hnQmlVa1NTcmtTN0YrTE03RlFmUlByN0wzZEpENk5pVFI0OHRLRzFocG1abWRXUkt3M25IWGVNaSs0eHlRL1VDMnYySk4xWDBzMlIybERreW45eXF3RXpNek96bVNFQWtEd1N4N2tTNEJVa0QwdjZyWnJCelJQSnErTjd6bk4rMjZrVXNpeUU5UHQ5Uk9VNEx0UlRKTzJGNTE1dGVuNjhkZ0JtWm1ielJ2SnppSTNZQUNEcENRRHVYaldvS1NKNVJZd1pSem1wRFFCeVF1QlpkQUdjak9OY1JUQlhTeVRKdndUd1AyWVE5aUo0aEtUSGxnbUFpSjlGL0F5ZEJBZ25BYmFDcEl2UUxNUUpBRWptbHFDZnJoR1RtZFVsNldmaURUQW5BeExORzU5YkFadVptZG41RXRJT3hiend1RjVVd1JzampUTytwa3BrOC9IVzJJVzYwWWF1K0p6YkRaaVptWmxOWDI3M08wSXozdXBGSytDdkJ2Q2tLbEhOMzhaR2Y1SjVMYUFOMWVZR2FOcTdyUUg0cnhWam1ZYmZMellMdGVIM1kvVnRKeG5Bek15c1RYcG9XdDZPNHJHWDFRdG42dTZOdE1IOGlLVDk4ZGc2a0tvZ2J1UHJkNkQ1dVFETk5kSkdkMENTUHpTVlNCZlRxOUJjUHd5UXFvbnZLZktqVnA2VEFGc2dKL3JFM1M3aVJTL3B1MnJGWkdiVi9heWtLL0tkWXFGK2pCaEltSm1abVoyblBBa0Rrc2VLeVlrK1VqWEE5NktaZEdnZFNjK08yejBrODdpcW5KUXlNek16cytuSm15OHVRNnBFdlI5TmxiWDNWNHRxdnRaenhlMW9CM3c4anZlYzZZdVcwQmhMdnFFb1YwaXZIWWUxUTFRSU1qTXpXelc1c3R2TjQxWm5mdnBTK1JXUy80Qm81MHZ5RUlxT00wVlM0Sm5rZWZkY0FDaTNCbFo4akpBMjZ0OWlpbkV2RkVrM0lpV0xVdEp1a2tjOWJtbzRDWEQ1ZGRHVXl1OGcvVkVmaitPWFY0ekx6T3I3ZFVsN1NSNGxlUnpwUEpIUEdXWm1abWJuZzBodENnNEJteFllZTBnNzd6b3gvdWlmN2g5b2dlZEVBdUJSeFBjTUp3Q2FtWm1aelV5TUw2OEQwQ25Hb1NzenYwV3lBNlJGd2FoS3ZUTWVQMUkxc09ub0lvMnAyMVExcjR0MGpiQXlyMUdibWErb0hZQ1ptVmtGWTZURXVPc2x2YUoyTU5ORThrZFJ6S01qNXRyajAvMThyWE1XdVVWeW5wY2Y1SCsrK1B5T3VHNTR6RFRpWGtTU1hnSkFrVURKYlZaUlhBbE9BbHgrZVZkWkYxSGRTOUxGa242MlhraG10aUFlQWVDTGthcnlqTkJrLzV1Wm1abWRyMDBMV1pFSUJ6VFZXTVpvcmxIZVBLK2dLbmdhMGhpcmkvVDlFdTFhdURRek16T2JwN3lCcEN0cDk4VG51a1d5MnhoQVQ5SmI1aGRhZFgrUnExckUyTHR0WTg0OFY3bnpqTTlhRGk5R013ODdSbHJnTlR1amlZMTFXVzdyOTRJNWgyTm1aallQRytQWkxjYitHNGx4a3I0VHdIZk9NN0JaSXBtTDlaVHo2T1ZjKytDVUx6cnp2emU1SVdqajM1SjBVVHpuVHdGY2M4N0JMb2ZIUzNvQTB1dEZhRG9oZHRDTXBZQ2lrK3FxY0JMZzhzc0xiTXJsUVNQTDlhZnFoV1JtQytSOWlFRkRubERZWmlsaE16TXpzL09WV3dVL3BIWWdNL1FjcERIV0NHbXhlZzljNmNQTXpNenN2RWphZ2FiaWRHNkZ0UmROUWxWKzNsNUozd2pnQVZVQ3JlT3BKSTlJMmlOcEY1cE52bTFKQmlSU0c2L3VXWis1K042R2FGOFhocWQ3b2xrMnNiR3VpNVFNbU52NDNhdFdYR1ptWmpPVWM1VDZ4ZGgvWHp3MlJ0b2MwZ1BRcGlxQTk0dnZjZWJGZXFLSytoR2tPZXQ5Skc4OTYvK3pvcmVncVl4NFNUeVdpeFRrWk1BeG1nVEx6cndEck1GSmdPM1FBUUNTQndIMEpiMnJjanhtdGpoNmtRWGZ5N3VGbzVTd2Q2S2FtWm5aMU1Va3cyR2t4YngxQU0rdkhOTE1TSHBmSEo1b1NTczJNek16c3hvNkpHOUFXcnpaU0d3amVRTE54dGE4b2ZWMkFGNDk5d2pyK1dPU1YrYzdSYkpRQisxYTI4bHR2SmE5UXNlYkFKeUlZOCs5Mm5aTUpyK2VRQ1NTU3JwNC91R1ltWm5OVlM1MkJaS2ZqOE1lVWhYQW0rcUVOQk4vVFBKdEpBOFh5WTR6VTFaUmovL3pVZ0MzblBYL1c0c2tBUnZYU25rTVBwNzR5SGJNTjdvNjJuU2h1SktpNHNRWWtUVWNPeVR2WGpVb00xczBid0V3aklGRnJsQno4Z3pQTnpNek16c3ZNY2xBcE92dlc1QjhadTJZWnVndWtnNGdGbTdpMk16TXpNek96UTVzcnQ2UUYyNk94MjJmNUtHWTEzcHZoZmlxSWZsdE1mL1BXTlFTbXVvVjQ5Ti81ZklvS25aQTBrTnJ4bktoaWlSTndIT3Z0ajI1NGgrUWttQUZZQnlKejQrckZwV1ptZGxzNVhIc0VNMG1rRHpPSFVwNmJaV29ab1RrdHdMb1NOb2RtK2RuclV5RUE4bnJrWDdXajUvRC8xMUZ2R2FJOUgyV20zSHlhNDJJMTllY1E2dkNTWUJManVTTmNaaFBrTmZXaXNYTUZwZWtsOGJBb29lbTlLMlptWm5aMUVtNkJRQVUxWWVmWFRlaW1mb3MwdTdVUFZHWjNjek16TXpPVFY2STZjUmM5OGJDVENUQURaQVdiVDVYSWJhYWZoT3BRbDZaV05hTDZtQjVYbS9wcTgzbHppVkkzOHZYVkE1bkd2S2EyeGp0YWRsc015UnBkeHllUkxUSEpqa0E4RnYxb2pJek01dXRxRTRIcExIK1J0dFdTZmNGOEloYWNjM0E3ZUs5ZmoyM1BwNkRZYTZrbnNjWkpJK1NmQ1hhbXgvd2lGaVQ2Q0dOcVRweG5EZGI1QmJUSzhGSmdNdHZqSlFBT0pEMDROckJtTm5DZWlJQVNMb0lVVG5Vek16TWJBYTZrZndIcE1tYkljbWZyeG5RckVtNkloWXZsNzE5bVptWm1Wa3RaWFU3UnZKZlRvRHJTVnF2RjFvZEpKOWMzTjBWdDhOb25ReWtaS0cyVkp2YmlaVDhlZnhzVDF4dytYb2d2NTY5L21iYmtUdjNqSW9Xd0lOYXdaaVptYzNENUVZWHBQZkJBd0RlV2lta1dYZ3l5VThoalEwRm9EdVBkc0RBeHVaOEFyZ29IdXJINDN2bThmOVhjaERwK3Foc0Fad1QvMGFTVm1ac3ZqTGZhSXYxMEdSSS8xWGxXTXhzZ1VuNmNMVG9Nek16TTV1VkVhSTliaFlMR1hldUU4NWNmRHB1dlZCalptWm1kbjdXRVFzMWtRQ0lPTDVDMG1lcVJWWFBJNUVXQ25zQStwSjJGcDhUVXFMa0pXaEhKWTl1YkZvR2dMdFhqZVRDbFF1T1FEdCtQelpiL1VpQzZBSWJuYjhrNlVsMXd6SXpNNXVwRGpiUG81Nk15blZYVllwbkZ2NkY1RzhqVmZnOUlta3ZnRkhSNVhPV05qYXFGNXYxQjhYdGxYT0lvUXBKbjVkMFdkd2RvdGcwUlhJZEsxS3AyMG1BeTI4b2FiZWtuNjRkaUprdHZEdEorc280WG9rM09UTXpNNnNpNzl3Y0lVMTBIQVh3NzVWam1pbEozMVE3QmpNek03TWxKcVFrR0pJOFR2Sm9MSlQ5T29BRGRVT2J1M1dTZnhHdHU0WUFCbmxUYnp6V1JhcVMySllxZ0NlS1NqQVByUnJKaFJtaWFXVTlMcE5aemM0Z3YyWk9SR1dnZkM1MEsyQXpNMnV6dkZHaVhLditialRWcjVjZXlYc2l6Wkh2aWZ0SEVGMXo1dkRmRDVCK3RpckdwTGtpWHBma1p3QzhlQTV4MUhBSmdHOHZFZ0ZMUXpRVm1Gdk5TWUNMTDFmUjRNVDkvSWZhai83aHo1bG5VR2EydFA2cE9DNnI5QkJwNTBVKzEzUmdabVptZG41WTdESVUwcmhpakhZdjRMNG1ibnZZUEk3S1l5dTNDall6TTdPVkZNbDhRQm9YbFdPamJuRU1wQTBrS0I3N0hRQ1BtSFY4aTRaa3VmakppYzhkUS9OemFrc1Y2cHowdE94Mm92aDlSV0tqTjJIYkdVbktmKzhpZWJocU1HWm1adE96M1huUUxnQkl1ZzJBRjh3c212azdFSzFuTzBXSFBnSTRNY2NZQkd4cXU1eVREMGZ4dWVmTU1aWjVld0dBM0haNVZMUmdYcG5jQnljQkxyNFQySHdSbkRPR055NzJKYm1zdkpsdG02U3ZRenF2akNSZGl2U21wOWhObkNmZWZGNHhNek96YVJtVEhKRWNZRDY3SGF1UTlFS2s3MjhjbFJDQm1IQ0ppUjh6TXpPemxWTXNmSzBoVmZmb0lpV3dsZlBidStOWVNQTlZyd0h3NkxrR3VoaWVpdlJ6eVJ2L1Y2SlNoZG1xaXIvenZKR00wZlhycnlxSFpXWm1kcUhLelNvZHBQRi9ONDdMKzhPNC9kaThBNXloRjVNY2tCeGhnZGZhU1I0aTJlWU5LeC9NMTVna1AxODgzanZOODF2RkN4R0xUMGduQ09WZGs1R3h1NGIwNE4zZzM2T1puWnMzSTFxSms3d2VNUWlKU2RrZTVyc1R3Y3pNekZiRENNQnhBSGV0SGNnTS9RalNXS3BIOGlDSzNZV3h1TlBtaVJVek16T3owNUswSDJuK0tTZi9kUUgwWW1HR1pTS01wUCtENVc0TGV5SCtPRzRIVWJHaURSWHl6T3dNSk8xRXJBR1NQQTdnQVpWRE1qTXptNGJjZ1c0ZGFmeWZrK0xHeFRFa3RhVzZOUUJjUy9JcFNIUGdvN005dVpiY0lqaHU3MTgzbXBtNklXNkY5SG9jbzhVRkNrcE9IbHNPT1VIbk9LSjhhckU3OGoyMWdqS3o1U1hwVjJPQ05TOU81M1BMVGpSdmhtWm1abWJuNDNRVlMwVHlZd0RlUGM5ZzVrblNtOUZNSmt5MkdIQWxGek16TTF0SlVSRTY2eUF0aWcxamJtcG5QRDZTOUhZQUQ1eDNmQXZpRHJHUkJKSU9rTHdKQzd4NGFHWlR3VmozQXdCSStzYWF3WmlabVUwSmtmS1Exbkg2K2RCMVNVOUFpMXEwa3Z6aUtPcDEycm54ZWNaek9pU0hjWHVVNVA4RDhLN0tJYzJNcEo5RzJueDJDVkxPVld0ZWIyZmlKTURGeHlMaGJ4UnRwUG9rajBqNjBacUJtZGxTZXhyUytlVUFrRnJVUldYQVkvSDVoUmlJbUptWjJkTEttd3J5UjNvd2pUZnVVUzJxMmJzUFVnV2JQV2dXYlR2Rk5aMlptWm5acXVraFdvSkZSY0QxL0hpTWtVWngvRllBOTZvVFluVTNrUHdFWXR3Y3lZQ0QzQm5JekZvclZ3SE1yZW4rckdJc1ptWm0wN0xSNmJKNExMY0FKb0N1cEM4QzhMSUtzYzNLSFNUdGlhNTdXVGszdmtqcjdodlY4Q1R0SUhuZm1zSE0yUE1rN1NONVkrUkVMR3lMNW1seUV1RGlXeU41WTc0VHgzbG4wQy9YQ2NuTTJrRFMxZEVPdUV2eVdKRUF1R214M3N6TXpPdzhDZW1hY3czTmdtYWVDUG5iV2tITm1xUi9JM2swN3ZZQmpDY3FNSnVabVptdERFazV1WVVrRDZXSHRCdkF5UmdqOVNYOU5kSm1pcFZFY2svOFROWVFyWklSaFFEcVJtWm1NNVkzamcwbDNiTnFKR1ptWnJPUjE1eHpTMkRGN1hVMWc1cXlWNVA4UkRFZkREVFZFTmV3V0FtQVFKcWpwcVQ5RWZNSXdCMHF4elJMMXlMTnp4L0Vpc3pQT3dsdzhXMWtTVXZhRjhlUzlFZFZvekt6TnJoYzB0M0tCNkpxalNSZFhDa21Nek16VzI2VEd3bldKNThnNmJZazI5em03ZGFTL2pQUzR1M0o0dkVkbGVJeE16TXpxeVl2aGttNlJmTVFUd0FZUzlvajZVOEEzSzlhZ1BVOUtHNXZoclFXTUVLcXpqRTQzUmVZV1N1OXJYWUFabVptVTFJbVdtMUtncE8wVDlKSDVoL1M3SkI4SEpxcXZ0MkpUMC9PalM5Q0VaNHhnSjJ4UVFzQU9pVC9EY0QzVm94cHBpVGwxNkFyQWRyQzZBRUF5Y01BRUF0S2o2c2FrWm0xeFhzQW5JampicDZZSlhuODlGOWlabVptZGxxVDE1aENtdXpJRzV2MmtQd1UwalhPcytZYzJ6eTlIYkd6TmRxNDlWQzBXakF6TXpOYklWMEFJSGxEM04rRlZQWHFVZ0JIQUR5c1ZtQ0xnT1RmeE8wMVNGV2srOFduSnhjUnpheDl1cEl1UTJvTmJHWm0xZ2FuYkFvSEFFbVhBN2duZ0R2T041eVp1Z1hTSFBBUWFSeWZxL3h1bWhNdkxFUitscVJkY2RoQlNvd2JrL3hkQUFmclJUVmJrcDZBeFVqQ25MazFyRWpKd3lXWFR4YTVYT3E3SzhaaVppMGo2UWZpY0lSbWNuRWxNdUdYMkVvTVVzek1iQ2x0TlliWW1Pd2dlU1BTZUdOSTh1Zm1GdFg4OVNSOVRSem5pYURlR1o1dlptWm10cFNpcTBSV0pxMU5yanNNSlIxQXFuRFhRN3RhZ0owWGtwUHpPd05zcmdBNHdtcG93enhrcm5MVEJacHVLMVVqc29VUXJiNXpjbTgrUjNiaU9MZEh2TFpDYUxZOGhQU2F5ZWVZWlQ1bjV0ZzlQMkxXYnVVWWFMSXE0QnZtSE1zczNTK0tlSFhqWXhDYndiT3R4b0lMY1E0bmVTUU94eE9QMzdKQ09QUHlNa21iMmg3SHhyUjh2UGZVTDFsT2ExaVFGNXB0VGRMK2RLUGRjZHZtdGxsbVZzZUw0emJ2VU1nVEVMYTRQSWxvWm1iTGFveFVIVzhQMHFUdjkxV09aNWJlQVd3a1BoS3VCR2htWm1ZdEZGMGwrbWlTV2ZveDFzdnJEanNBUU5JQmtnY2wzVmJTVFhXaVhTaFBnNU1nZ1BTNjJiSmF6Skk2QVd5cWZHa3JManJ1REdLTkR3QVl4eU1BdXlSOVhiM29iTUdWYXpUNVBYV0U1VjY3eWNsQW5oOHhhNytjK0Q1Qzg3ZC9WYVZZWnVITkpOK0c5SDJPNHFOWEpOY3RzenZWRG1DR1BvYlluQ0ZwTDhuckplMURhb2w4Qk12OUhydGhJY3BOMnVsRkwrNWUwWnJ6elRYak1iTjJrdlJhTkR1TlI1SXVxUm1QbVptWnRSYUJ0Q2dtcVVmeVpiVURtaVZKUDRjMFdiL3JiTTgxTXpNelcxSkVtbFBhR1Fzb2cwZ003RVF5NEFCSTg5eVN2aFBBSit1RnVqQStUdkxYNENRSW9LbWd0L1NpZWtoZWN4TmFzb2hvRnlTMzJBUEpZL2xCa2tmaS9EaUUxL3pzOVBLNWNmSmNzdXhyK3o0M21yVmZIMm10K1VEY0gwdHFVd1ZBa0h4UUhKYkoyYTNvd0VyeW93Q2VYVHVPV1pIMFlSUkpmMUhORVVpL3gxWmNsN2dkOEJLUXRCUHA1UGpjMnJHWVdXczlRdEx0OHgyUzNwRnRabVptczdDeEtFYnlxS1RMQU55N1prQXo5bE1BSUduWkorbk56TXpNVGtkSUZlMUdKQTlMMnAwckFjWjQ3MUlBa1BSaUFLK29HZWlpSVBtbGNkZzk0eE5YUTV1cUFONEo2ZnZKdjFmL2ZpMnZ2K1oyd0JzdHZ1UDgrUFB6RDhtV1VKNVBhTU42L2hqQVRqZ1IwS3p0QmtqSlZRY0JkQ1g5SUlDSFZvNXBtcjRxYm5OVjc1dzRkckpDTExQUUlkbm12S1FySlQwcHJsbUY5UDdhS1k2WDNocDhJYkxvdW1oZWJNK3FHWWladGQ0SEFTQjJiWS9POGx3ek16T3o4ekVHZ053S2llUVJrdjlRTjZUWmt2UnJaZFVITXpNenN6YVpuRWNpZVN3cUFRSnBBZWw2U1FMd0ExVUNYRHdIQUNBMnczaitiYk5yYWdkd2dSNkt6UlVBWGVuUmNndkVRU3cwQTBqdDBlUHd4NnRFWmN0bU1pSGg4MVdpbUo0VFNJbUFadFp1YXdBZzZaWUFYbHc1bG1sNkZzbC9SaHJ6RGRFa0FrSlNXL0t1eHBMMmtHeHp3dmFMQWR5OEdKK040N1lWRzVUVzRBdk5SVGVLMHVDdFhoZ3pzNFhRay9UZ291eXRMYTQyRDd6TXpLemRPZ0JBOGpqU0pNa0E2WDN0UGpXRG1yR24xZzdBek16TWJGWmlIbW1qNDFCczl1Z0I2RXU2TWhJQUxYazV5YzhqVmNXK3JuWXdDMklOelR6WE8yc0dNZ1UvRmJkK3pWc3BMeXJuMTdsSUhwUjBkYTJBYkduazE4eDQ0dlk5RldLWmxpN1NPWEo4dGllYTJmS1N0QmZwNzd3TDRET1Z3NW1tcTBqK0hKb0t2MTBVaVlDeENid042N2U5Mk5UVkFYQ1gyc0hNMEtlak12TXVOTzlMclVoU1h3UHc3dHBCMkpsSitrb0E5Nm9kaDVtdGhMK1N0Qjh0S1hmYllwNU1ORE96WmJVRGFZSmtMT21pZUV3ay83NWlURE1uNlUwb2RvYWFtWm1adFVnbnFscmxoWk9MQUF3bFBSbkFKK3VGdFpCK0ZLbTZSRjRjYk1NaTRZVmFSN1BZOXY2YWdVeEJUbWljVFBxeTFaV3ZBVW55Q0pwazZXOEdjT3RxVWRteXlHMkFKNnNTZldET2NVeU5wUCtDemVkSk0ydWhlTStEcEEvV2ptV2FTTjRHVWVFWDJFaDJoS1NMY1dwcjRHVjJNaloyalFGOEFzRHpLOGN6TTVJK2dpWW5vb09XRk5CYkkvbTN0WU93TXlLQWY2b2RoSm10bENmREYyR0x6cE9JWm1hMnJJWlJacC9GaE5EdStOenQ2b1UxY3crS1ZubG1abVptYlRPT2xyLzdBWURrb2FqKzk0TEtjUzBVa210Uk5WRm9Xc2EyWVpId1FwWHRjdy9WREdSS3Vtam1WZGZPOUVSYkNjTzQzczEvNnprSitOWDFRcklsc2xWTHdqNkF6ODQ3a0NtNk85SjUwc3phclN2cFNRRHVVRHVRS2JvMW1uRmVGd0JJSGt3M1BJeFVFYkIvK2k5Zkt1T29hdGdsdVU3eXA4NzZGY3ZyamdDK0h1bDMxNXJjaURWRXB1cUM2K1BVaEFlaUhRT0ZMcHJzMG8zdkowK2FTUHI2R2tHWjJVcDdUdHl5V0pRSG9wVkxITGVoVXVER1lLejhQaVh0bC9TSUtoRnRueWVKemN4c2FaRThoT0s5TENZVlFQSlRBTjVSSzY0NXVEWnV0N3IrMjMzcTA4M016TXdXeXFhcXhubitHbW1ldmhQSmZ3OTIrOTh0UFF4cC9Gc3VERHBCTE1sdDFFRHlaWlZqdVdDU2ZoL3RtaisxTXp2YlluODNYKzhpRW44bG5aeHhUTlllYXhPM1hRREhzZHl0Q2dmdzJvWlptM1FRMXdpeDZUc2JBZml0S2hITnhqTUFmQUhwKzVxc0ZsZWUwNVloNzJvNzhoaDJoUFE5clpGc2MzR2ExMGphVzh6UGI0emhKVjFlSEMvTkJ2K0Z2OUNVZEU4MGc0SitQTFluN3JlaEhPTUlUVmJwS01xR2RtTmhEQUQrdWs1WVpyYktvdnl0U0I0ckpuV0hBQVp4RG01RE5ud3UxN3duSm1ONndFWml3dGZWREd3YjJwQUViMlptZGdxU0Q2d2R3eXhKdWkyYWlZU055Wk55TEdKbVptYTJnUHFJaXM1NWNTU1MvdllpemRPdlMvb1VnTCtxR2VTQytrT1NiMFFhQTViemFXVmI0RlUyUWhvSGQxdXlNZVl4YU9aUFQ5UU94bWF1WE96dklNM1o1c0lmSGFUWFFONW9MMG1QeFJLc3k5ckNHRS9janBEZWM1YzV3ZmkyQUhiVURzTE1MbGlldzF4SFdqdnVrandhNzNlZHRtMEtJdmtiTVhmYndkWlZXbHVwU093Y0kzM3ZUNnNZenF4ZEc3L2pYQkd3SC9rRDF5REdkVkh4Y1NtdTM1WmhzSG1mNHJnTlNTZW4wd2NBa2tmekE1SmVVUzhjTTF0eGQ1VDBKVWhsakhOU2NyNjRiTnNBWndjQVNDcDMwQzE2QWtJYmt1RE56TXkyTWdUdzV0cEJ6TkFuMFd6K0dzWmpQYmdkbkptWm1TMnd2QUJFOG1oc0dNMzNqMGg2Z0tSMUFQK3BhcEFMaXVTM3grRU9wUEZmcnBpUzJ3S3ZQRWtYQVJnVkZkT1dYWjVEOWU5M05SQk5Vc0FJVGVHUE1lTHZQTTZidHdmd3FtcFIycklya3c2V3VVREF2U1U1Q2RCcytlVTVUVVVobVpHazNmRis5L3MxQTVzMmttWFh2RlU1ZjQyUnZ2V2phTWExSFpLL0J1RDkxYUthTVVuL2lMVEJvd2ZnZUpHM1ZlWkZMRVUxM2pVc2ZyYml2U1JkRWNkREFMMzRnZWVCZFJ2ay91RkF1aWc0RVl0QzMxa3ZKRE16ZkF6RlpGV2NsMXBYcVNZeTkwSHlPTER4ZmQ2eGFsQm5kdTNabjJKbVpyYWNKTzBsK1EyMTQ1Z2xTUThtZVZQeDBCREFMampKMzh6TXpCWlFWRUM0WHRKbHhjUHI4Ym5QQUhoTG5jZ1dIOGsxQUQxSkI3QjVBMGcrYnN2NnhnV0pzWEZyZmhhUy9uZFo3TUZhalVqcnJPczRmZEpuYmhuODhibEVaRzJUMS9CM3hlMnlueXUvaHVTTnRZTXdzd3ZHMkJTVXUxdDJTSjZROUo4QlBLNXliTk4wTDZUY3BNUEZodTVsS0xJMkRXc0FJR2tYMG52UkNFQ2Y1RjJyUmpWYjk1RDBERVIxeTNnc2I5NGF4Mk5MVWVsN0RjM0FZVkU5a3VUVmFBWTZlWUN6RkZtVzI5QkYrcU1aUmhaeEQrbDdhMjBXclprdEQwbjNuVWoreTRhbitaSmxNcmxqYmgxSXU5Z3J4SEl1UG9SbThzak16S3hWNG4yWUFINnBkaXd6OUZlSUtqQkZXNFc4eTlETXpNeHNvZVJrSnBMWG9abVBlRXEwK2JxOFdtQ0w3MVpJQzBiRFlxNnBCK0JrOFJ5UC81STJ6RE9XSG9hbU5heTFXMTRVTGhNQWMwdGdJcldTMjlHMnRvaFdSUzRrc3c3ZzB4WGptSVkyZC8weld4WDVmVzBVRzRWeVcrQjMxd3RwNmw0QzRCb1VWUS9qZHRtVHNiZWpoMGg2aTl5QS9MMFBrTVk0dDZvVjJCeThRTktYb2FuZ1BrUnpEVHpDa2xUNlhrTzY2UHg4N1VDMllRM3BCenlJK3lmUWpvSEN4dmRBOGdSU011QmQ0ZllKWnJZWTNob1RsVGxodVUxVldITzIvdVJ1dWtYM1pteWVNRFl6TTJzYmtmeUoya0hNa3FSZlFMT0RzQmVQdFdXam01bVptYlZMSnphdmR5VmRIc2tzejY4ZDFJTDd2a2lhekhOT0kyQmp2SmZuMTdwbzFqcFdWdDU4akdhZHBCV1ZKU1Y5QjF6cGU5VVFUYVdjdkVnOEFQQW5OWU95cFplVERjb2tsSCtzRk1zMExYcVhRak03aTlnbzFJOHhyOXFXOEU3eSswbGVnM2gvSjNrMHJvbFdZWHczUlBxK3k2cDNIUUNJdHMvWEFmaVdHb0hOeVlmaWRqeHh1elR2WFd0SUw5Uy9xeHpIR1VtNko0Q3hwTEs4Wmx0S2JlWVhUYzRrQllCM1ZvckZ6T3dVa241YTBrWDVMdEw1cWcySmdIbEFtdDlQaGdBZ2FkR1REdjRhcXpISU5ET3oxVlJXUS9uZWFsSE0zay9HcE1raFJITC9STlZsTXpNenMwVXhKbmxNMGtjQmZLeDJNRXZnbFNSL0YybnVURWlGRGJvQWtGc2dSalZveisyZ0dRTkwyaHR0azE5WE9hUnBlVG5jeVdNVmxIUGtheWlxdzBqYUorbUpBQjQwOTZpc0xTWTc1S1VIeVE5WGlHVnFKTzJISzZXYUxiVmlFOGNBcVRYd1Q5ZU1ad2ErdkRqZWlmVCszb3R4NjlJa2dsMmduVWpKblFmaWZrZlNwU1FQSS8wTS9ncnRxdnk0aWFRM3hQc1YwT1FQWEZ3eHBIT1NFeDgrWFRPSWJYZ0JBSkE4am1aUnFJY1cvcEZKdWwvdEdNek1KanlQNUExb3N2d3ZRanNxc1FMcGZTUlg0Um5IL1VYZnpmN3AyZ0dZbVpuTlVGNE03Y1RpYVp2OUlwb3hTQnMyV0ppWm1Wa0xTWHBWVlBadzU1cXpleGZKeHlPMVJNdHpad00wVlRUV0FJRGtUWEhmU1dJeEZpWjVoT1JCa2krdUhkQzBSSEVMYTdmMXJSNlVkRG1BZXdKNDZYekRzWmJLNitJYlNlVkxiaC9jNmNoc3FVVUhPU0MxdmI4ZGdPZlZqR2ZLbmtqeVExSDFEMmptcW9lUi9OaXFpb2Vua1NzYmw3L3JFY21EOGJrMWtrZEozcU5XZ0hQd1VBQ1B6bmNrN1YybURmdzVDZkJucTBaeGR2ZEJrNmh4RW1tQlpJRDJWQVBjYUFHRkJhL0thR2FyU2RLZkk1TGtvc1J6VzVLd2M5dTlFWm9kMmdzdGZ2NXR1TmczTXpQYmlnQkEwcTY0Zi85Nm9jemNrOUZNSlBYTzlFUXpNek96MDRtcWN1VTh6Vlp6TnVWajVlYjZEb3BFTkVuNzBHd0MvZFZJL252c1ZBTnVNWkwzQWpaVmljZy81enpmbEJNRGMwZWdsVzhISFBKWW1NdFVZV01iY212akRwcnZNYy9wZWZ5L0hQTDVNYmY2elkvbFRWeENTb0RZaldhamVRL0Exd0Y0d3h6alhIU1Q3MHZlQkxjOWEwZy91L0k5b3cxVlpIOFlUUUp0K2Ryb3hwaW1yREptWm5XVjc0TkFlcDhyLzI2UEEvajRYQ09hcmJlVC9CMWc2NDR0UlVKYzI1VnI1ZVg3empnK3R3Nmsxc0FBYmpPL3NPYnV0eVJkQm13VXF3T2F2NGtPMHQvRFFvNXA4czZ6bzdVRE9SdEpYMVRjSFNQOWdIZFVDbWRxWWlBekFqQ1E5S3JhOFppWm5jWWpKTjAranBjaVdXNDdpZ1FEQUZpWDlEUFZndGsrb3RsQmJtWm0xallkWUdPaWhTVC9zWEk4TXlYcFUzRTRLSGFZbXBtWm1XMWJ6TzByeGhJOWJEMW5VMjRtSE1aemlEUy92cEdJUnZLd3BKK001TCtuelM3cTlpRkpwSjl6djFnMDlDYk83Y2tKTG11NVpYSmJTUHBUcFBXc0lkTGY1d2pwYjg5VnNKWkRQait1QWRpRnBrQkpydWJlQlRDSWx1bDdBWXdrUFFTcEhiUTFKdCtYRm5MQmZBRnRTcllJYlNqTzhBTm9Ob0JlakNaNWRrVHlKTEJTaVRabWkyNVFWcitUZElzNDdpRnQzbWpWM3lySis4TGo5KzNZQ1d6TTMzOE9pOTloNzBKY0c3Y2pwTmQ5SGh1TzQ3Rzh5YXZjTUZKZHJxUzNETWtjNzBVek1Ndy80T0hwbjc0Y1NCNHBlbWw3VjZXWkxiS1BTN28xMnRNS2VQSmlVbGo4eXJpdmp3dmpaWGpmTmpNek94OWxhOXlkU05kODk2a1h6c3o5SjBsWEFGdnZNRFV6TXpQYkJnSWJZNGs4WDU0cmorV3FmL254ZmxUN0E5TGN3bERTcFFBZzZkbVIvTmVtZGw1elFmSWlTVmRLdWpuU3VrVTNQcForL1dJT09tam1HdlB4WDFTTFp2b2VIYStOeTFBa08yTHpkWTh0TUVuN2tYNWZaZkpmUC83ZVJ3QjZrdmJGV3QrVEFieTJYclFMS3llL1pxMVpYNWlUdkphZkUwOWJJeW9yamRDc2QrUjJtMlpXVndmcHZOMHAxbEc3SksrTGlwMURTYzhEY0VtMUNLY3Y1K3Q0L0g1MkkwUUNOOGxqSko5Wk82QlprdlNQY1pzcmVaOXBETDhRaVlEbHdPRkROUVBaaGx2RmJUazRiTVZnSjNaWUhxd2RoNW5aTnV3RE50ckR0RVZIMGo1SmQ2NGR5RGE4dEhZQVptWm1jNUF2cUhjQUFNbDNWNHhsSHE1Q1M2NXR6Y3pNYlA0bTJxZm1hanE1OHRnd1BVVjdFQldzWWk1NmIyNjVCK0Nsa2Z6M25EbUczU1pYQWhpU3ZJcms5V2lxdloxd3BlZHpRalJyUHkrdUdjZ01mSnJrZFhIY1I5UHB5b2xReStHbTRqaS9UZ2NrRDhVYytURE9xOThGNEgvV0NIQUpUSFlXOG10L2UzSWl3WHB4MjRya0ZFbjN4T2J6ZnU1OE5JWmZIMmFMWUF4Z2JhdXhMTW1qa3I0TXdFL05QNnlaK1paNFg3KzBkaURMUXRKRlNNbWdseU1WUlYrSTVMY1p1WWVrSjBRRi9oNmFKRm1ncVFBb0xGQUJueklKOEJkcUJySWRrbDZCWnJCWTdoQmJaaDFKZHdXd3YzWWdabWJiOEg1SmUwa2VyaDNJRkJCSUxZSGorL2xnNVhpMjQrMXRhNHRpWm1ZMmdTaGEwb1VSZ0h0WGlHVnVKTjJ6Wlpzc3pNek1iRTYycUNhYzI0eDJjeldkV0xESWlVZEFhbXY1cmtqK2UvaGNBbTJuKzVHOE9sZDJqb1hEM1BaVnJ2UzhMVG01cFZzYy83OUtzY3lNcEpmRlF2cWdlSjNZNHV2bXYrT0p4SUFPVXZXYncwaVZBTDhMYmdGOFdwTHVHSWRsNVp3Mkp3dE15MlEzdnpLNVlCM0w3WlZJMzAvWlByRVB1RXVDMlFMcFJKWGJuQWc0S2pZUkxYcHhzWFB4VVpKL0FteGNNOWsya0x3cDNmQWFBRHZqZFhLdnltSE4wc3ZRakdOeUJWc2lXaU1YMXJBQWNoQmprbjljTlpMdCtUWTBPeG5YMFk0a3dER0F0bGUyTUxOMitXRTBGWHFXbVlCMFVSazd6eFplbE4xZW1KMEVabVptTTBLa3NjWkdNaURKZjBDN0pwZ212YlVsbXl6TXpNeHMvb2pOQ3hKalJEVzZXTGpiMkdnZzZlR1IrSGNkZ0R1ZThpL1p1Zmh1a204REFKSlh4KzMxdVRJWVVqS0RrMXpPTGkrZ2JWVFBLTnJPdGNrVEFEd08ySGlkSERqTDgyMEJTTW9WMjd0UjZWTkZNc1FRcVMzdzc4TUpnR2Z6M1hGYkpnRk9McHJibVpYdjlSMEE3NndZeXpUY0FTbjVXNUl1UVRyL2x4dEMvZjVwVmxjWDZicGlrNmdDMktyNVM1SjNRbnBQNnVEVWplbTJ0UTVTQlZjaFhmT01TQjRuK1k4QVhsODFzaG1TZEJLYk4vSUlUU1hiN0V5dGd1ZG1EVTFGdmFWSUtwRDBCNGdTcEdoQnl5UkpQMU03QmpPemMvUWN0R1MzcXFUOVdKNkw1bXVMWTE4RW01bFpXd25BTGtsNXd3SFI3QWIvaW1wUnpZR2toOWFPd2N6TXpKYVNrT2JMTzJnMmJRNEJJQ29CbnBTVXEvNjlxazZJcmZQOUpIOGZ6ZnBFUHlkYkZoczdCcEhZWUdjbnBJWG1jdEhzSlpWaW1hV1hTcm85a0JJQmF3ZGpaMWRVQWR5Ykg0cmJzYVRMSlgwY3dHT3FCTGRjZmlSdXg5amNQcy9PTFArOGNxSTAwRlJOL1l0S01VMk5wSjhEdHF5OFJTeElKU1d6VlZVa3daZlZPZnVTbmdIZzVuV2ltb2t2QnphKzMzRWNuOUlDMmJhVTIwVVBva0xrR0tsNjVQOVhPYTZaa3ZRbmNkMlh4ekdUT1hhVFNZRlY1Q1JBSUMyc3ZMbGlMTnYxeUtMVTZDa1p5RXZvWjJzSFlHWjJybUxpZU5uMVNCNlM5THphZ1d6VHM5Q0M1SGN6TTdOdEdNUWtjQzZwUDBBejZmMkJpbkhOMmh0cUIyQm1abVpMS1NmKzVVUkFBS0NrWHdYd0JRQkhBTnk5UWx4dDliMGtYNEwwOHo2Qk5FNGRsRldkOCtLaFc0cHRTNWtJVkhZZStiVTV4ekV2SDBkOG44VTZseTJ1dkNFdFY2ZmNGVjFsN2dqZ013QnVWUzJ5NVpRTHZBQkxVcGhtQVpUSmNMazduZ0M4c1VJczAvWU1iSDArekpzYnpLeVNTUHpyb0toQ0t1bFNBQytvR2RlVVBaM2toNUdxL1I0cnh1OXVTWDUyWTZST3M4ZVFFditPeG9hSmNkeGVXVGU4bVhvTWdNc20zcmZLOStxRkdOK3NBZGdSeHdNQXYxb3hsbk54Qk5pY2ladkxwOGNMcXpQNStZcUl6VWtiekhGSituOTFRakl6dTNBeDJaRjNva0hTWmZHcGpjY1dRQmZZdUlqczV3ZUw5NHpiQXZqSk9xR2RHNUsvQzJBVTd5RUxNWWd3TXpPYnNWd1JKQitENUYzcWhUTjdrbjZ5R0ZNQnpZU2JtWm1aTGJaeW96MndlVDY0ajYzbFJiWHlZL0x6L1luN1cyME9QSWswNTd4WDBqY3JXUWZ3dEhPSTM3Ym44U1JmZ2MyL3ExUG1hTHg0ZUU0VW5UcUE5Rm9HQUpEOHQwcnh6SnlrbTVBV25QT0NLWkFTWVRyRmM5cThlTHBJOHJ6MkhteGVWOHpYWVFNMDNkU0FWTzNtVVFBK012OVFXNkdMSnRtM0RVVmU1bUd5azk4SUFDSnhaZWxKZWd4U3NZYWpTR09leWZHVW1jM0dWaTFMTjgwL1N0b1ZoK040Yi96a3pLT2FyejlHT3IvdUFBQ1N1WUtiaTdHY216SFFiSmdnZVNRcVhqKythbFN6OVVHU1I0cWNyNDNxbUF1U240WTFwRUZzSHlsTDgwMlY0OWsyU2I4Y1dibDdBSURrUWFRTHB5T0lRZVNDWEd6blh0QWJ1OWhJcmtjQ3l0ZFVpOHJNN01KOUJIRUJLbWtmeWVzUVZYb2tYVncxc3FTRGxEUzNMeTRpQjRpSmhualBHR0lKQjYzeDN1WkJxSm1acmJMbjF3NWdobjZCNUhXU3JvajdreFArWm1abXRuZzJLbVNnU0dJS0hhVDVDQUNBcFAxRjBrOWVkQm9YSDBTYVIrN0Y1d2Rva29QS0RSSTVrYUl2NlhzaTZlOExBRjQrelcvTU5uazB5VmVpK1YwQkhxZE5RNGZrNStJNEx6NTNrZWJ0L3JaT1NMTW5hUWhzTEpoMkpQV1FGdG4zSUsxelhZV3RGK2h0dXRhUVhvTkR4RG00V0Zjcy83N0hBSHFTZmdQQW44MDV4bGFROUZzb0VreHlDM1ZiZWIrUHRKNjBCK204RHpRSnVHWTJPK3NUOTNNYjdueWU3a2NlemlWeC93UHpDbXhPOWthaVdnL0FjUUFvdmxjbnFWKzRVVnczSGE4ZHlLeElVaDR6a2p5RU5KN2Z2eUQ1YWFrMG9hUTFOQmV1LzFFdm5IUHlORW4vcmRnZEFHQmp4ODRnanZlZjdvdm5xSXQwc1RDTUNaNDhlZlBacWxHWm1VMkJwQ2NEV0l1V0p6a0JjUGVDdk1tTmtTYk5Ea2ZtUFNWZGhEUWgzNWYwajNYRE95ZS9IcmVjdURVek0xczFQWkxQckIzRUxFbDZDOG1yaTRlOCtHZG1acmJZeXVTOGZMMmVLMG1NZ1kyS0FEMlNoNHEya2tDejROMUJzK0Z2R0IrZCtMb2hnQjFGcFlIYlN2cEZTVGRKdWhIQVMyZnhUZGttanliNXY0djdYYVExQ1cvU3ZIQTU0UlVvMmxuSDdmZk1QNXo1aWFxZGR3V3dubHRIUjNYQWpjbzc5YUpiR2Zsbm5NL0Z1YXZNeGJIV21KTXpMNHNLanYrOVFveHQ4U1Nrbi9OQTBvR3loYnF0Tmtudkkza1NrV1F2NlpKRnFhUmsxbUtURzFuV0p1NFBKTzJOY2NrVEFkeHVUbkhOdzhOaTNOV1J0Qk5OOTVuUEFhZTBKN2NMUUhJUkNnYk5qS1EvS2U2dWs3eWhXakFUMW9CTkZmTjZBTDYxWGpqbjdQV1MvalBTaVdnM2dCUDVZZ2twUS9sUXhkaXlFV0xDSnNwQzdwWDBEYldETWpPYmt2K0pkSEhXUVpNQU9MbURwQXBKdTR0cXNTY0FLTjRqZGtoNktJQjdWQTN3M1B4YzNPNUUrbGtQei9CY016T3pOaHZHKy90RGFnY3lRdytJNjl0YzRjZUxmMlptWnN2akpKcTJ2Zmtqejc4UGtUWWw3a09UUEpZM3Q0K1I1cEdGWWd3UUZUZ09TSG82Z005S0VsSlhBN2Y2blo4Zkkvbm5hQkk2OXlIOXJnWndwWkJwS0tzOWJTUmtTZG9UMWZEYTdyMEFkaFVMenIwaVVkaWJnZVlna2k1eksrQkxrYW9CM2hqenlFTkpQd1BnMnBveHRvV2srNkxwMG1PVzNWblNnK080RjM5L2kxQmt3bXhWRUtreTREcUtqUmtrYjRyT2xtM2FjUFNISk44WTg2NDc0bHpES0N5V2t3Rzkvam9Ga202TDlEUGRlN2JuTHJISFNQcW1PQlpPN1FwUXpScWF3ZTBCQUVPU3kxWmkvZDNGOGM2NDdXTnhGa3FJbUxCQlNrdzhEdUN2Szhka1pqWTFrbjRQMFJJaHpuVzU3VzVWRVV1ZWpCM2xwRUJKandEd21ucVJuYnNpcVgyRW9yMjhtWm5acWlMNXB0b3h6TmdOU09PWGZJM3JCVUF6TTdQRjFVZnpYajFHZElWQnVvWWZGYzhCZ0VGVVA4cVA1d1NvRHBycVp6c2tQU21xaEFtcG84d3ZBTWpWd1d4K25rN3lsK080aDZiamhDdUVURmQrL1plTHJ2bnY0WG56RDJlK29xTG5OeUNkSjNLeThHNHN6aHBYcTVYSlJwRjRLcVJxWkY4ZDUrQ2ZyUlpjKzd3VlRhWGJSZWprdHV6YWRINzhNMGxmaWZUNkdMc1NvTm5jRU9sOUwzOEEyRWlRSDZKbG5TMUpQaDRwd1RGdjBBSlN0N3U4QnR1SGk3Qk1CY2xQeGVFT0FOOVdNNVlaZXcyd2tXczNYcFRyeEp3RTJKblllZkZ2bGVJNUwwWFA1UkhTeVdvUUR5L0VEN2t3bHZRanRZTXdNNXV5eDBkTGhKeWNSalJ0YjZxSnFvUkhFVzFGNG4xaUQ0QlgxWTNzblAwS21pb0N3SUlrV1pxWm1WWENhRVZ4R1lDdnJ4M01MRW02YmJFZzVTUkFNek96eFRWQVN0WWhVaVdKdldqYXhaYnY0ZDM0L0I0MENVNGRTVStUOUw4bHJVZmUzNDBBZm4yTzhkdld2bzNraTZMeUg1RXFnbDBVRmVxT0FtNFhOa1U3TU5FU3VLaUc5eXRWSXBxLzErU1dZcEoydUFyV2ZNVGZOd0Qwb2dvZ1loUDUzd040ZjczSTJrdlNIeUVWVGxtRVRtN0xyazNWdVFEZ242SkZPbndPTkpzTG51N3hxRWJldGczWWQwTFRkbnczWW9NUGlrMFhrdnFuK1ZvN1B4MEFJNUovVkR1UVdZcGN0WU5JeFpLT252VUw1bUFOMGE0VzJCandFc0FqS3NaMFhtSkhEdEMwV1JpUnZLbGlTRmxPUnV3aVpRNy9RdVY0ek14bTRUT3hJTDhYRXp0R2Fva1d3RUE2OTNZbC9TQ0F6MVFNNlh4NXQ3K1ptVmxqRFdrVDIzVklWZUhYSzhjelN4OUZtcEJ5UzJBek03UEYxa2VhVTkrSnRBbnhDSnAyc1dPa2VlR0JwRXNsUFEvQVI0cUV2NU1BZmhYQXd5ckZibHNnMlNQNVI1SU9ST1hHL1BqSm1QKzZOTzR2eENMUGtpTTJ0MVVlbzBpZWpiK242cHVONStSaHNjNjFBODExZ00xUVZQYmNpMVNsOWFDa253TndCTUM5SzRmV1pvK1Q5SU5Pb3I1d01TL1NOdStWOUYwNGZYS1NtYzFXRjhBdVNUOEU0RUcxZzVtaTd5ZjUwVGp1RnBVQVJ5ZzJiemxCZlRxSzkvamNRYkJQc3RYajJ0amtzRERXNG5hTTlNSStqRFJSOGM4Vll6cHZNWEZ5a2FUOHh6bzYyOWZNUVRjbUEwYVNQbGc3R0RPekdlbElla0N4UzNjUkRIUFplRW5mRE9ERmxlTTVML0hlUEVDME5JNkhuUWhnWm1hcmFnZlMrMkEvcnJQdVVEbWVXZG9wNlc1STE3VTVnY0RNek13V3ozSEVaa2hKQnlROVFkS2ZxakdNeEo2ckFQd1VnRnZWRE5iTzZtWlJDV3hQVkhRZ21vMytBMkJUOGwrckY3UG1KRzhtTHJ0ZzVKOXJ2ditWOHc2cXNzOUordTlZalBXdFZvdE9Na2NrUFR5U3NuK3Fka3dyNHNWSUxiRHR3clIxamVEbGt0cTg0ZE5zVVhVa2RhTWFYcHVxa24rYzVPK2gyV1NTeDFkbFB0Rnh4RWJ6MkJ4Z0Y2QzRWaG9VdHlPa2FveHQ5VGhKWDFvN2lDd25BZWJlM3ZuNENnQlByQkxSaGZzQ2dCOUEybDI1QjgwZmRPYzBPMHNteTNwMnNYbUhBYkgxeGZ4a093Y1U5L08vMlVXY1NLSmQxWjIzRWIrWjJiSjZDemFmR3lkdmdjMkwxMXUxdFpzOC81YkhXeTE4OTlHY3R5ZlA1N2xrOVdjQi9QNlpRMTlZZDBQemMraTdKYUNabVJtR3VWSURBSkM4cG5JOHMvWU9OQldXTjZyNEZ6YXVWVDFKMVRwbHR3T3paZE9CcTNjc2lodHJCN0FnVHBlb1JVbjdpL3VuZSszMm80cmZUMGo2R1VtdmtqUXVrdnh5VmI4aGdNOENlQm1BUjAvNWU3RDV1Q1hKSXlTUHh1SlZCL0dlUEZIMUx5OW9EZWNkWUlzSnphSnMvdm1PQUlEa3A2cEVWTmN2eDdubFVwem1IRlpzRnU0Vng5bmt2T3F5emlXVzMwY0htNzhQYnZHYzdmNWJlVDc1YnBHay9icnpqdERPMTJza2ZUczJyNmNDNmIwNXQyayszZnJCdWY3Tzh4cENxUzNYV1FkckJ6QXJNYmI2ZTJ4K2plVFh4RlovejIyVVgrL2w2N1VMYjBLd0M5ZEJlaTNsalV4N2tGcTFIMFBMemlza3Z3UnBQdm5tMkR3bXlwWGJnYUxEM1lJVnUxbG1HKy9oeFRqMU9peHB3WjV0K3FmeVRxNGVIK1k2RnM4djlERlNxOFM5VWVaU2tiUjI3VHlEbWJJYlNPNEIwbUpJdEFiT0YrWDV6WEdFOUFmZGt6VFpvemxmVUpTN3JmTFhEU2VlQnpRN0xqcEkxU21HU0QvZnRZaGhoQ0xwMHN5c3BaNUQ4aGNCbkl6NzYwaWxvOWRJSGtkenJ1ekdjYmxiTFo4ejE3RzVuVEFuN25mekxrMmNmcmNiSlgweGxyUDk3d2FTRjZPcEtMQ1JXRzVtclRCNWJnT1FCdUVWWXBtMjU1QjhMaGFnTmJ5MVVyNStCZEpFOEVEU1hRRzh0MTVJTS9jU0FEOU84Z1RTOXo2NTJOekQ1a1hUVmNhbzROR1dhKzkxcE8vbE9JQmRaM211MmFMSXI5dDhYZmRna3YrbmJram5wUlBuRTJ1SGRhUjJvbXRJTFh2TnRuTExxUHdIU2Z2ZERteWhkQ1I5UFlDL3FoMUlKZThpZVU4Z1ZSc0ZNSXExckUzWDNQbDFLMmxmZEJiSlNTUExmSjJ3NWR3SjBuVmhEMmtPZXN2dkwrYVBqK1hiNGxOOVNTOEE4T1NwUjJ2bjQvTUF2b3prOWNWalBVa1h4ZncvMGJ4M2I3V2VjQ2JsbkhxZVMyalY5Yk9rN3dId083WGptSU9yQUR5TTVJZXcrZmMrZVg0b3p4bkxuaGlvaWZOWEZ5bi9ZSENHcjZtRlMxeTljWjNrRHB4NVRiS05PZ0RHVWZrNjU4ZDBKUDFmQVBlcEdOZTAzVEsrdjVQWXZEN2RpdmVBUlZhZXZ5YU9MMFZLQm13dGtvejh0Q01UMTVVNWFYM21HOG5LaWZGUkRLaldJcmpya0tvNkxhdExZcGRBYms4NUxDb0JEdEVrNy9VQURJc1RYRTZNWEVjNitlMUdreEE0UkpQY2w3OTJqRk16Ti9NdlR2RnZQQnJ0V1lRd016dVQ1eUNkQThzTDhrRzh1VTllQkV3bThDa2V5NFBydkFNL3R3VHBJVW96eDBUV2VLdmRzSkp1TCtuNVdQSUVRQUEvaVhSQmw5OC95a0hwc2wvQW1wbVpuYStOOFlPa0hRQkE4bjBBL3FWYVJMUDNwTGltUFlubVdyTmJYdDlLdXFoT2FEWmplUnpvQkVCYkptdkZiUWZBUTNGcTFYYXplVnREbWp0d0FxQnQ1UjBBOWhZSmdBZHlJaFU4LzFKZFVabm1UYlZqcWVnZXVTSVd5WU54YmJBTDJGUmhwQk1MalAyWU53WFNYT0pHRmFsWTYxcTI2bEZyU0F1bVpRVXdJRjBYNXRaeUxENmZLeHNoTHpiSHhuUkl1bHpTMzBpNkVVNEFYQ1EzQjNCZHZNYnZHbzhONDNXZXE3R080cU1zeHRKSFU3bnBkQitUWTlBKzBqWDFpUzJxWnk2akRzbmZyUjNFbkZ3SjRJUHhPdmxMU2ZmR3FkZkpYYVJ6Umo3dm5lMzFzZWdmaU0yZ1FETUhOQUNBb2xxbTJYa3BPb1N5ZU96cjBhNEV3R2ZHK0Q2dlBlZHhreE1BNTREa2VuRjhMTC92a3J5ZVpLdm5zU1c5TU1ZeHZlSzZFbWdLeWMzY0dsSVNSZjZQUjNIL3Nyai9xSGtFTVdOdmlVSEJuVWtlaloxU0haeStaSCtaaEpMTG5rNG1xdVFKemROV0JKeG94ZlRxQy93ZXpNeVdocVIzeFNFbFhWSjhLay9HOUpCMjRHZjVvbXl5N2M0NHZpWmYwQStSenQyOWNyQVFuK3NnN1ZKNUxvQ1BBL2p4S1g5YmMwZnlOK0p3cXpZWFhyZ3dNN05WMWdlYWxteXhVUHVWZFVPYUxVbS9nV2FTaXNWeEJ3Qkkzb0JUTjZlWm1TMkNhN0dZMVNyTXpJQzBPUGhmaW5IbFJqSmdKRksxdlFyTXdvczFuYnpXOHRpcXdkUjM3MWpyK29pa2ZFMTBQVGEzUEIwZ3piM21hNE1oSW9rcTFycnltdGE1dEZTdGFZeFRFOEJ5VW1CTy9sUHgrZno4VHN3ZlU5S2pvK3ZDWndCOC9YekRuNG1YMVE1Z2h0NGJyL0ZQU1BvNXBOOW5YamZvb1hsdDV5UlFudVZqQUdBazZZcjRtbHpsV1JQVklaZlY2Ym9rdGQxREFieGQwbzFxL0tta2I1VjBaVHduRjVaWTlvOTh6aDdsU2xKRnRWZXo4MVlreWg4cDhvVGFWSEY1bmVUell5eXdzUjd0djUyNTZXSmlIaWhlYzduWXp4REF2U3JFTlM4L2dqUmVPUmxWRUE4amZlK0RJZzl2cG5MVnZ4dmpmamZkNVhYeCtGRUFiNTlISUhQd3dSam85OUVrUHVaa3Z2S2lLTzh1eXp0RTh1T1RGYXp5QlVaZWdNbkpLdW1Ua1owdnFjMERjak96cmR4ZDB1MlJMcVpQb3BsUUdpS2RTM01yOWl6dmJCcmoxTW5WRVRZUEZJaTBFL0JZVEFCMmtTN2tmenBhTlQxcjZ0OU5IYzlHR2d6c3hlWmRLZmw5YTFVdjhNM016Q1luRWZwNW9SYkFheXZFTXkvL1BXNTdlWk5GWEsvbjYxVXZVSnZab3Jxb0paVld6S3g5YmtmeStVakpRZ2VBdEJBYW4rdE0zRnBkWXdBZytTZTFBMWtRZHdSd1VOS25ZaUZ4SnpZbk9HMGt6SjJtK2w4L3ZtWVpyaUZ5ZGI4eVlmRUVtcm5SRVpCYUllZS80N2ovVFFEZUhlMHAyMVNrNDMvZzFMWEtOcm9kZ0orSzVLNTFTU2NsM1JRZko0dkVyL1d6ZkNqV2hhOUNkQmlTdER2V2g5dFNxYnFQNWU3cU55MlBCdkJ5QUo4c2Z2ZG5lMzBzdzhjcEFIeXU4cy9hV3FJWS94Nk8xMVpya093b2JlNDVoczB0d2tkWXZxckl5eWl2YTNlMXVYRGFFTUJ4WUtPeno5L09PN0I1aVp5RmNaSDhDR0NqRysvTWJXb3hxRk5iQ1BVQlBId2VnY3pScCtORTlpZzBpWHREcE1UQXZVamxrNCtpMlRHVkx5YktrOS9HQllhS0tsZVNjaEpnRnlsNTR3b0FUNWpaZDJKbXRyZytIcmNEcEVtbGZIN01DWC9iM1dtYXEvemxaTzJ5VmZDZEpMMHZ6dW5QbVVMTUM0UGtjK093VFBZckI2Wk9BalF6czFXVkp4SHkrMkp1N2JTYjVHUHFoRFFma3Q2Q3RCbmlLSnF4MVFqdFdid3dzM1pheTIzNHpNd1d5QUVBTjhUeG1PVEJ2RUNsbERTVjF3bzgvN0lBeWhaaUFPNVVOWmpGOHA4QVhDdHBLT21Ga3ZZcUZiaFEzT2FxS3lmamZnOXBUdlk0bHFjVlhxN3VKNlQ0YytXLy9GaXVpSGdJd0grTkpERUJlQlZhK0ZvaCtSTUEvcmwySE11bytKdTRNU3J5dEtWUzlRQXRXeHN4czlsVDZxcHlVTkllU2I5V081NHB1eDJ3VWVVd2p4L0w0bDV6YWNkcUFOSjExdEU0TGx1MTl5UjFTVDZ3WG1pelZ5VFg1bTZIYzdOV0hETitDWGt3M1Fjd2lOMXY3NTVuVUhQeXNraWFIMHA2TnJDeDB5OG5tK1FTMDVDMFA3Nm1INThyQjR3M29XbkJsSGZnNU9TV1A1akQ5MkZtdHBBa2ZYTWNUclpyUUpGQXZWWHJpUzZBZmd6T0dGODdqRjE2VDR0ejkwa0E3d1J3NTFsK0Q1VThEL0V6bVdoTGtDZTR6TXpNck5rWUlFbDc0ajF6RE9ERkZXT2F0UWRJK2kvQXhnYTBuUHpuOFlHWkxiSjhUV2RtdGdnK3crUlFySVV3THc3R1F1SGVTRGpidzNhMGlteUxmblN6SXNtUElyV2F0ODErQk1CbkFSeVI5SXNBTGk0K2x4ZGdjMnRnQVJzSnJ3dHRJc1lobXVURnZxUXJKUDF1VVIzcjFXaDNkWjlMa0JLK1hBWHNQQlF0SUlWMDd0OTNwdWN2RTVKdFhNTTNzeG1LQk1EOUFMNE13Rk5yeHpORnYwTHlVMGhKWnBmSGVENG5BT1p4a00xZS9wbHZkQUNVZExHa1BENHRFK0p1TWVmWTVrclNNOUFVNU51SE9WV2F6NytBMGNSakczOEFjZUY3cEcxbFFNOWlDT0F2QWZ3OWdQMEFqcEQ4RFRRdlNFcjZBYVFMcVJNQXJnQndIWUM5QUc2SzUrd0I4SXg1Qm0xbXRvQmVCT0F3MG52TlNRRDdBSHdhd0MyUnpwYzVBVEMveCt3QWNGRTgveWxZd2JZckpQUFBwSU0wUU9waDg0QW9ENXk4a0dhMjNEYU51Yk9XakxtZkV4Vk4yL0M5Mk9McElWMi81dGRYRjZsQys3NDhxZCtTdjZQVE9RRmdYOUZLWUJoVkVJK2hHVHVzTXNabWtiV3pQdFBNNXVYSFNQNXk3U0RPUXlmT0oyYldIcjlNOHNjUXhRL2lzZks2Ykt0NUdJK3ZLaXZHdXZuM3d2UndxOGY4MC9SbUFMOUY4cy9qZmc5cGpuWlpYdGY1YjdBcjZVRUFub2oyZFMvYmp2dVJmQnZpL09YWC83a2plVEhTdWIrRHRBYlJpa3BRZVM1RTB0VUFibDA3SHB1UFlnMXBVVkNwL2ZveVdpZTVBNXZuc2JlY3QyK1pWcjZmRk9mNkxJOGo4dmh4ZDNRcVdKWnhVQnVVK1dqbDZ5MlA3YnVTSGcvZ3BSVmltNWM3QVBoc1VSVng1cmIxSmhHN2JYNFlxVHFSbVptWnpjYjNrWHhaN1NETWJDNmNCR2cySTVMK0c0RFgxNDVqaGk0amVmMUU0dU9lZVU0a0xEQW5BWm90bnA4bitkTzFnemdQVGdJMGE1ZXZJcm5SUWxQU3BTU3ZoNVA4bGtZczJwNUFKTzVFZDZmblZBMXFPUjBIOEtzQS9vamtoOUVzeXVZTlJ2a2FJeisrVmRKczNyUTlqdWVkd0tuWC8zbnRzU3Zwb3VqQzFVZjYvWTBsN1k4V3ZvaC9ZMGYrZnlSZEFlRGJBSHdqZ0h0TTZ4dGZZczhrK1h3MHY0dWVwSnZPOGpVMklaSjgybmkrenhzanZ4YkFPMm9IWS9QaEpNQ3BhbTBTWURIZUJUWnZkaG1oblJzcXJpUjVkZTBnYkZ2S2E3QWVnSk9TUG85VTliaVZTTExZM0VRQU81SCtGdlA1cGh4elgvai9kN1luUkREcmFHRTJzSm1aMlNLSlFjQWRvN1dKbWJXYmt3RE5abWVaSngrM1phSnljQTlwa21DcWt3Vkx5a21BWm92SFNZQm1WdHZOaWxhL3g3RjVzV1d5KzRJdG5uS1JjT002T2hMRnJxb1ZWQXVkQVBDL0FId0l3RjhER0JSSmVsazVqekU1cDlFdC9oMWhjK3U5WEgxbmIyeGMyaW5wMjVGYUVINERnQzlCdTl2NFhvaHJTWDV4SEc5Yzc3Vms3bWl1MnBvRVdHNEk5T3RpZFRnSmNLcGFtUVJZSlBWdmxXd0VTUzhFOENQMUlweTYrNUQ4KzhsTkk3YTRpb1E0WUVVcWZjZTVPMis4dVl6a2RVRFRtWGVhLzlkMko4YnpRc0wzVHZNL056TXpzdzFYQXVnNUFkRE16T3lDQ2NDWDF3NWlsaVI5Wnh5V2s2eXJuZ0JvWm1abVZ2b09Ka2Rpa2VrSTBnSW8wRlF6OHdMaDRsdEhVOHdpSjI0aUtyM2NyVlpRTGJRVHdGT1JXckZkQmVDZ1RyVWV0emRJT2pIeHVTOUkrbmRKUjR2bjNsUitIWUF2eFBFUXdPOGdKUjk4Qlp3QWVGb2t2MWpTUHFTL2dkeksxaXpya0R3YTNmd0E0QTFWb3pHemhaRVRBR1BUUkI3LzdnSUFTVitDZGlVQXZwYmszd1BvUmxLWngvZkxZUTNOSnBJMVNmc0JIS2dZejh4SmVpbFNBdUNlU0FEc0FrQmNwM2FReG50VEdldWROUW1RNURGSmw4WHg3Mkx6SW9PWm1abGR1QStSL0F6UzROUVRYMlptWmhlbVEvSVR0WU9Zc1ZlZzJjRTdrTFMzY2p4bVptWm1pK1JLQUc5RXFwelZCM0JSUE01SXFBRlNSYWhGcTZSanB4SlNnbHAyRXZGN0kvaytBRSt1RWRTSzI0MVRGeWgzQWRnZm43UHB1QTJ3c1RDYzllRHpsalhHUUZySFIvcWIvTkc2NFpqWm9vaDVRcEVzcXlhZlJFbzYrbGlkcUdibUJ3RkEwaTQwU1dXMndHS0QxbEdrZHZaWEFCaEhCZW9UQUo1WE43cVplcUtrLzV3citKWWlvWDhOVTZwYXZKMUtnRjJTMThYSmdpUzkwOFRNekd5S1NINjVwSXNSYlRJazdha2RrNW1aMlpMcUlsMHNkd0I4YWVWWVprclNiOFloWTJISUUxMW1abWEyNmw1TzhpS1MveEVWVUFiWTNOWlU4WGdISGpzdEU2SkpmQm9qdFF2YkRRQWtmeFBBOFZxQm1jM0l2U054STdmRHp1MGIxK0w0UFJWanN3VXlrZGgrYmMxWXpHeHg1SG5DUEY2SzIxRlU0MjJUbTZGSmlENENZRWZWYUd4YmlqYkFuYWp1dlZFUmorVFAxSXRzTHQ0TkFKRUhNSXJqM1VVMXdLbllUaExnQ0trOTRSRTAvYysvZjFvQm1KbVpyYmo3QStqSG9HZUV0SkIveWk0QU16TXoyNVl4VXJXWEFZRHJLOGN5YTAvQzVpb1FKMm9GWW1abVpyWUF2cFRrVTVDNkxPUUZ6cTZreStONFk5d1VHekdCWnIzREZsZHUyN3lHSWhtUVpCNzdDc0NYMXduTmJDYStqK1EvSUYzWGppVmRDbXdzRU9kRjgzK3BGcDB0a2s1dStRa0FKSWNBSGxRM0pETmJJT1BvK0xtWDVIRkp6NjBkMEpSOVJ5U05IUVNBR1BNUDRJMCtTeUdTNE1aRmd1cmVlSHd2eVZaWFBaWjArRFI1QUNOTTZmVzduU1JBU05xSkdFUkVqK0tYQURoMjVxOHlNek96c3poRzhxM3hQcnRSb3J0eVRHWm1ac3RzTEdsbjBWYmdsclVEbWlWSmIwWWFPL1RoTVlTWm1abXRwaGVUWENONURkTENINURHUmowQW8zZ2NBSFpGeGFTOCtYSlVJVlk3ZCt0eDIwRWE3KzVDV3F2S1kxK1MvQlNpZGFyWmtuc0t5WmZGZ3ZoQTBqNlMxeU1WYXRtb2VFbnlCK3FGYUF1a0Y3Yzc0LzF0U1BKdmFnWmtaZ3VsQjZUcWF2Rys4cXpLOFV6VHY1RjhUYjRqNmNvODVzL1ZEMjJoOWVONnJKZGIya2RCdW8wcWxnRHVVelBBR2J1NXBHY2dYYk9XbFJFaGFXNUpnSXovZUdmY09ScTNsMHdqQURNenMxVVY3NlViTGZ6eWU2emJBWnVabVoyM1h1d0NQUVlBMGZydEhaVmptcVVIeHUxeGJLNEthR1ptWnJZSzdrenk2VWdKWVFPazhWQUhLWGxtWjM1U0pFY01vbUtTa0JhV3B0WnV5V2F2V0JBN2p2UTdIR1B6Ny9BTEFCNCs1N0RNcHVrOUpQOFgwa0w0Y1FBZ2VUaVNHWVpvcXQ3bjZwaG1nM2gvRytVNWtIaTkvSHpkc014c1FZeUw0eS9VQ21JV1NONFc2YjJ3ZzVSUVdnM1NSUUFBTU9kSlJFRlVkaFd3VVVYdWNOWGdiRHNHNVoyaVN2dEdFaWZKdndmdzIzT09hNTVla0tzOUk3Mk9pVFFHbkVvaHZ1MGtBU3IrMDdLMVVDZCtBUWVtRVlTWm1ka0tPaER2cGZtOU9POUFkenRnTXpPejh6Zk03UU1RMVVKSS9wZWFBYzJhcEUvajFNVnNJbllURnR3T3c4ek16TnJpRlV3K2pNMFYvWEp5MkthS0Nsc3NCbzZ3ZVdIVUZwZUFUYi9QWEFGd0hCL2QrUHlScUlEMTVybEhhSGJoM2g3WHJUdVJYdGU1d2h0SWxxM2hUazUrM2xaYXIzaC9HeUdTQjBpMnJlV25tWjFHTVFjS05IT0NlVDV3S0dtUHBIZk5PYXhadTNWeFBFYVJVSmFyeWRuU0dBSk5FYm80THEvaG5sb2pxRG42WkNUemo1R3VjU2JIZDF0dCtOL1dSclp0dFFQZXdwamtpT1FBd1BQTzg5OHdNek5iVmQ5TmNoQ1RPSjUwTmpNem02Smk0cUNzRHRMbXhjQXJKZDBlVFhXSUh0SzFmcDRFNnlIOUhOenl6c3pNek5yZ3pnQitxSFlRdGpDR2FCYk1UZ0Q0TmdCL1hTOGNzM1AyUnBML0ZlbTFQRUpLM2ppSmRBMlhyK1B5dGR3WWFVRjRDT0EzNXgrcUxaaDgvdXVnMlJSSXBOZkwvNmdZbDVuTlhpZGF4aDhCd0VnR3pHdU5RelRKNDQ4RGNQY2FBYzdJYjVLOHJuWVFObk41QThTQTVQbm1zeTJMOXlDOWQvZVE1dkx6ZFEyUjV2Y25Fd0hYdC9PUFhzZ1BiUVRnT01sbkEvalFCZnc3Wm1abXErVHRKSDhQcVgySkYrUE56TXltcTRlbU9nZ2s3UUlBa3Q5UUxhTDUrSGh4dkZFQkp5WUJjM0tnVzk2Wm1ablpNbnRNVlAvN1pHejY2T1YyVWJieWh2RmFFTW1ESkI5Y095Q3piWG9MeVVlaFNlVEtMZkh5eHZIeUdxNkR6WnZKbnoydklHM2g1Y3FvSTZUNWdENUpKOHVidGRzNEtvSDJrY1kvT1Jsd0Q0Q3hwSzZreXdEOFZ0VW9wNHprRDhLRlZWWkJGMUhoTnNaRmo2MGN6eXo5SjBrL2pLaUtXTnhtay9sOHdqWnNOd253ZFArWTR1Ty9idlBmTVRNelcya2s3NHVVdVgrbTkxWXpNek03UC9sQ3VROEFKTXZkY2EzZUNTL3BvWEZZYmpMWVdYeCsxM3dqTWpNek01dUtkNUs4aU9Ucm9sM1NFR21zTnl6YlJkbktJckRSTWhWb2txYnVVQ2NjczIxN0s4bXZReFJjUWJTM0pua1EyTmpRVlY3YjdZaGJBV0IrbnEyMEhwbzVrSTJrbUhpdkJJRC9iKzRSbWRtOERRRWdFdjZVTjhyRUdQbmFxcEZOR1VsdkFGb3RIYVJrMStNQS9nL2FYZW43VnlWOVNmSCtEYVR4M25wOGJOVVcrSXpPcFJLZzRqL0lIeHRpZDlWa2oySXpNek1yeEh0bEI1c1QvY3IzVmljQW1wbVpUY2ZKdUIwQWdLUTlLN0FUL2cySWEvWFkrUXVTbjR2UGRiMUlibVptWmt2b0ZpUy9GbWxzTjRxS0p3QXc4Q0tnQlNFbHdvemlOWkVUcVQ0QjRCWlZJek03dmRkSEMrQzhycHJYWDdOK0pISUFzY0VObTF0ZjcwU3FrdFBtQlhFN3V6enYwVU42L2VUTmtQOE9vRVB5OWJVQ003UFppNFNoM0NiK2huaHNQMUtGNUgrdkdkc00zQjhwQWY1WW52TzBWc3NWYm9tVUNIaGtCU3A5ZjR6a1lVa0hpc2RVZkp4VEl1QzV0Z05XZk0xay8yRWk3VWk1MnpuK2UyWm1acXZpMW9qeXhjVmpSUE8rNmdSQU16T3pDNWV2VTBkb0ZrdDZ4UUxLSStjZjB2eEkrbEVBSUhsVDhYQytYamN6TXpOYkZsOVBNbzloTnRZaEpPMHROanNjdzNsVVJiQldHZ0ticWdIdWtMU1g1R0dTRjFXTXkyd3JieUg1alhFOEJLQkkyc2l0NzRCVUdURFBGWmNWM2k2T3cxRjgvT0RzdzdVRnRnNEFrblppODlwQ3JoN1VjUUVmcy9hS0ZzQ2RPRDRXWTU5RGtwNEc0RloxbzV1cS93SGdYNURlTTd2RkhLKzExMWpTRlJQMzd3amdrbG9CellPa3owU2w1OU5kNDI3NzJuYzdTWUNULzlqNjVCTWtmUkVBa0h3ZmdEdHQ5ejgzTXpOYkViY21lUTFTTXNKV2I5S1Q3NjJleERZek16cy9Pekh4UGlxcEY3ZTdTZjVGamFEbTZBV3hnSlEzSHBTTEFkMXFVWm1abVpsdHozT1kvRjlKdHkwcUdZK1JraG1PNURabjhiZzNWRm9lNC9iUmpJRUhKSTlFTzlVaGdMMjFnak9iOE4wQXZoMVIxYVZJYWo2RXpaWCtjbUpnSng3dnh2TnVMUDh4a3ArYVU5eTJtTllBSUZvbEFpbDVOQmNnMkluMDNqa0M4T3Z6RDgzTTVtQWQ2ZTlja2k2THNjOCtBTDlhT2E2cEl2bERSVFh3RTFXRHNibUlPZnlyMFZ6cjlVaCtOSzRObjE0eHRGbTdYTklQQWRpRkM1ekgzMDRTNE9SejhnNkMvRU1ueWV1QlZIYVU1RWNCUFA1Q2dqSXpNMnVSUjVQOExOSWt6Z0N4T3psTXZxZG01MXFwMTh6TXpKSVJtdmZWQVpDcTRrVTc0R05JNzhjUHFSWGNuRHkwYUFtU0t5SzZHcUNabVprdHNwZEU4dC9QUlZMTU9KSmJPa2dMbTNsc0E2U3hUWjViOFNZSHkyMkFCMGhqM3B4RTFZMEtPWDJTTjBSbFNiT2Fua0x5OS9KNktnQkVVbk8vZUk0QU1OWmFEMjA4bU02QlFKejdpbGFJWFFBL050dXdiWUhsOThYMU9BK1dqNDBpRVJva2Y3aDQzTXphWVdNTUhBbFQxOFhkejFXS1oxYStORzd6ZTZXdytYM1RXcWlvK042SjlyaDUvTE9iNUlzQS9FZk4rR2JzMXlYMUpYV3h1YlBnT2RsT2tzRldBNE5UZHRqRkQvMHdVaWJtS3dGODMva0daV1ptMWhMZlIvTFBrUVlydytKaXZKeDQzR3JYdWkvS3pjek1wbWRVdElvWWtueFQxV2htN3hVa0QrY0pmd0FuNFNvNVptWm10cGplRmNsLzN4LzN4eE10dnNZQVVGVC9BR0tqUi9BbUI4c0xoVUFhOCtiWFIzNXRuRVJLSk4wZGlZRHZubmQ4WmdBdUkvbGliSzVjbVUyZTAxU2M4L0k1OFByaU9Tak9reU9TcmFyNFpPZEZjUjdjZE4xUDhtaFJiWEpubGNqTWJGWk9JUDdtY3l0Z1NXK3JITk8wZlFmSmYwWGE0SEc4ZVB6NGFaNXY3U0trYThPRCtZRTg1aWQ1YWJXbzV1TmdWSDhlbzhrbjJJbTRwdG5PUHpDTlNrUDVCSE1jYUZvdGtYd1pnS2RPNGQ4M016TmJSaytOOThMeXZURVBUcjBRYjJabVZrRk1nSGZROHBaZ2t2NCsyb0RzUWFvQWNGbnRtTXpNek13S2I0M2t2M3ZXRHNSYWJ5VHBRQ3lRWDByeUhnQ2VWVHNvV3gwa0w0b2t2ajdTNi9GU2JFNzh1NkIvSG1tQitDZW45TzlaaTBpNkpCSUJEeUFsb042dWRreG1OaldLemI4ZHBQZUMrd0s0VDkyUXB1cnRBUDRpam9kSWE2cTUyclBYVjFkY3ZQYnZYRHVPV1pMMEwzR1lONUFRcVVQdnNkTjh5U2JUU0FMc29xaG9GQU9LZlhIOEd3QWVPWVgvdzh6TWJKbDhXN3dISXRvM2xMdllDYmVyTVRNenF5TGVrOGRJNzhYWFZnNW5sdTR0NlRLU1E2UUpndXZnZGhsbVptWlczK3NqK2UvK1FPb3VWRGNjYTd0SUFEd0lwR3BxVVJIdzV3QTh1bkpvdGdKSVhvelVIV1l2Z0lHa1BmRTYzSE8ycjkybVhmSC8vT0tVL2oxcmtaai82TVE1Y0VqeVV3Q2VVamtzTTVzU2trY0E5Q1I5TVlEWDFZNW5ta2plTDVLZHluYW93Z1cwUjdYMklIbUU1SWNCL0hydFdHYm96cEtlaUpRRTIwY2FUMTY4M1MrZVJoTGdLUDZkWG56azh2ejlPUDRMTlAyNnpjek0ydTRXOGQ0SEFQMmlmVU4rbjF5RDI5V1ltWmxWVVd4WSt4ekpPOVNPWjhiK0RXbWl3SnNQek16TXJMYW5SVFdzYjRyN0hRQWd1VjR4SmxzQmtmelNLVnBpSGtNYUgvOGRnQ3NyaG1idDl2Um9QejNJMTZBQVFQSmszQjVGVVZ6bEFneml0ZDBIOE13cC9IdldMaDFFUytuY0ZZSGt5d0g4V2RXb3pPeUNGY25rQXdDZnFSbkxESHdwTmxmK0E5TDViQVJnSFU0RXRPWmE4bWtBUGw4NWxsbDZxYVRiSS8yZDV5cUEyeG8vVGlNSk1Cc2cvZkgxaXZ1SUV1di9DcGNaTmpPejlydGR2QW5ubGc3NXRvZjBIam10Vmc5bVptWjJIb29OYTBLYURQL3J1aEhOVkUvU25TWHRSQnFMZUJ4aVptWm04L2J6VWZudjE1REdYeWZpOFhIY2VueGk4ekF1dW5SMEFZeElIaVo1TllDYkFmaVBhcEZaR3oyUTVJc0FRTkxsOFZvN0VwOGJSR3RXU0xwa0d2OVpWSDhmazN6K05QNDlhNVg4WHN2aUhIZ2N3SGNCZUZlVmlNeHNLcUl6NTM1Skw2MGR5NVE5TFBLS2VrZ2JtOGRSVFhkSGZEN1A1OXBxeTYrQkxzbGJWSTFrOWo2T2RQMmlTUDdkVmp2c3FiUURMa29QNXYrMEc0L3ZJWGs5Z0I3SmEwaE9NK25Rek14c1ljU2s5cWNRZzlGNE0rNmlxYjZqZVB4aXVDS1BtWmxaVGNlUmRzME5TVDY0ZGpBejlzSFlvRENzSFlpWm1abXRsQWZHUE1uemtOWUpEaUJ0anN5TEY0ekhwOVVTMCt5MGlrcHNSSk9JMnBlMFA5cUpmVEdBaDlTSnpscGtQYzU3L3pkYW5aUGtOZkg2eTFWYitrVjc2bWxjbzNXUXJ2V0djZncxVS9nM3JWMDZhTllveHBKdVRmSVl5ZnNCZUh2ZDBNenNBbDBCNEltMWc1aWlmd0h3ampndTN5TVY5NG5vUkdvcnJ3dHNiS2dRZ1B0WGpXYkdKUDFkNU4wZDNlNzE4MVRhQVpPOElRYTFYYVEvd2hQeCtOSHllUUJFc29kMlYxc3dNN1BWOGthU0xDWjBjbG5lbzBqdmZTY1FyZmdrN1NaNUE5d08yTXpNckthZFNOZkN1WXI5aXlyR01uT1N2cTVzUVdWbVptWTJJMjhIOEZXUkJQTzNTSXQwSjVIV0NYSkwxdDB4WHlKZ295V20yU3l4cU1KV1ZzNFlrRHdVNCtReGdQY0F1T1hjbzdPMitIbVNuVWg0Vm16RWtxUjlVWTIrRzJ1b1F6U2J3NmVSQkRndUZvUEhKUDhGd0d1bjhPOWF1NHp5R241VVFBV0FreVR2QytDTkZlTXlzL1BYQmZEZTJrRk1FOG12bkhpb2o4MlZUTHRJRzd1ZENHampTSW83QkFBazN3cmc1WlZqbXFWN0FYZ1UwbWFTYlYwL1R5TUpzSTgwcUQyQlpqZkxXanplaThlR3hmRW9xaTE4OXhUK2J6TXpzNXErbCtURGtBYWloNUVtRTN2RmJSL05leTNqdlZMd0lOWE16S3lXRHRJRStDN0VMbEtTVDY4YzA2eTl1V2lEYkdabVpqWnRUd1B3cFNUdlMvS2YwWXc1QmtqSlZmbittT1NOY1V4SkZ5R056Y3htTGJlUzZ5Q3FVZVpOTWpGTzdwQThSUElvU1FKNGM4MWdiZW5jaHVTekplM05WZjdpOVliaU9teEk4ampTT1RHdm8wN2wvRGRSVVhCTThsSFQrSGV0TmNiQXhtc3hGeWJvQVZoSDZ1TDNNTGdpb05uU2tkUzJqaDlYSWlVcUg0bWtaU0NkdnpZMmNFakthNjl1QjJ6akloa3ViL0ovV3ExZzV1VGxrdllWZng5bk5JMGt3RUhjNXBMVFFQcmpHOFI5SVpMLzBQeWhkZ0Q4S1lBRFUvai96Y3pNYWpnQTRFOFFFNGp4V0g2L0E5SjdZSjd3enZmeisyUis3elF6TTdQNUdpTWwvaDJMKzBMYVNkcnFSRUJKejBBekRtRXhZWkFYNWIwQWIyWm1adWZpUFFCdVRYSUh5VjhqK2EvRjV5Ym5QTXI3ZWY1RXNYRGpSVHlidFZ4MThnaWFaSmlqa1JDVHJjZnRNQ3EzZlFPQXI1cHZtTGFFZmo0cW4xNkZ0QmlkSzA2aVBFWnpEaXpuaU12N0Z5U1NJbkoxd1U3OC85TlkrN1gyME1UOXZIYWZ6NDhQQnZDWWVRZGxabWZFK0VEWi9qT1NnSDZ2VmxBejhzdFJwWFFVNDdBOFo3c3AwYkZJK21wYkFxU2R2MXlNTGxmSXUwUGxlR2J0TS9IM3dUZ3ZkQ2MrdnpHL1gyc2dPQ1k1SWptSW5WVnRMczlvWm1idDhwcVk0Qm1RSE1FVDFtWm1ac3NtWHdmbkMrVVJnRGRVaW1WZVhvQlVBV1UzbXZaVVFGcVFJdEo0eG9tQVptWm1kamJmSFhNaS81bmtkZkNjaUxWRE55K3dSL0pXSjZwYVhnTGdsNnBHWm90b0hjQmxKSCs2ZGlCSXI5V2phRGFsajZMS3BlQkVWanU3a2FUTGtlWUYza3p5NHRvQm1Wa1M0eEtoYVA4Wmo5MEd3T01yaGpaMUpIOHNiMWJPRlpvcmgyU0xyNWZudU9OKzN1anpDUURQcUJiVkhFajZQd0RXaXZGZkgwMlY2WEd1ZGw1ek44Z0l3SEZKdTBsK0Q5cWZtV2xtWnN2dklRQytCeWxwNERpYUNSWXpNek5iUGp2eVFWU3YrYmFLc2N5Y3BOZEZDNm8rMGxpR1NCTnJPK01wWHNRM016T3pyYndDd0MxaU0vL3JpbW9rNjdubHBka1N5NjFhYjRqN1kwbTdrRnJTSFNQNUUvSGEvMlM5RUcyQlBCNnBPOHdBcDFaZnFTRmZ3M1dLUk5iRFVVbnBud0hjcWw1b3RnUTZKSzlCYXFXNEU2bWEwaVZ3bFMyejZ2S21CR3llcXlPQTk5YUphRFppak1Vb3VBS2s4NUhuSisxc2hpUnZqT05jRGJDTE5INS9JWUJEMVNLYnZRZEtlaERTOTl0QkdwUHVRdnJiNmVWcTUvTktBcHdzTmJ6eGVQNEZrZnlFcXdLYW1kbUMrbTJTRjVGOFUxVE9LVnZjVHpyZDQyWm1acllZMWdGQVVyNGV6aTJUL3FoYVJQUHhjS1NKdERHQUUwaGpsZzdTdUtZRDc3UTFNek96eHJOSjlxTHEzL2ZHWWtKT2lzclZTQzZlYUhscHRveE94cTJLSktwalNHUG1IbEp5MVg2U3R3ZHdXYVVZcmI2WHhQbndEMGtlbnFpK1Z4dVJ1cS9kVkNSbWo1QVdncThEY0x0Nm9kbWlpMHBLUTVLZlIzb2RIU081QjhCM1ZBN05iTlhscmgxNXZiRUg0SnA2NGN6RTdTUmRodlE5anBDcXUrMDh5OWVZYlNMcGtqZ2M1bkVReVFNVlE1cUhOeUQ5emV4QWt3ZzRqSjhGZ2ZsV0FoU2EvdVhjOUFscGo2UURBRUR5S1FCdU5zZTR6TXpNVG92a3hTU2ZpbUluQVRhL2o1WHZiVTRBTkRNelcyd2I3K0VrMS9OeFVkSG0vdk1PYUo0a3ZRV2JkL1Z2dEF0QUpFZWFtWm5aeXZvZmlJcC9KSitIcG1weXJzYXhROUpHNWF0SWxGcUVTbGhtRjJLRXRMRE9uT0NLcHZMT0VDa3BKbGNUT1U2eWg1WmZNOWhtY1U1OGN0d2RTN29VQUhLN3RRV3doblF1SHBFOEFXeWNuNGVTOXBMOEZJRDcxUXpRRnRZNHY1ZEx1aGpOZS9vT2tuOGNoWHZhWEUzSmJHRkordUk0M0FHZ0wra1pBSFpYREduYVhrbnkzMGhlWHo1STh0Z0N2Yi9hZ2lwYkFVZkJ1YnpCLzJEeHREdFhDRzF1SkFucFp6Q08rL3ZpbW1VTm1IODdZTVgvdVlabXNTSC9nZzdHWThQWWFVQUFkNWx6ZkdabVp0bmRZbUp2RUJmQlFKTlpuNVA5aU9aOXpRbUFabVptaXkrL2J3Tk5NdHk0cUZELzFpcFJ6YzhESk4wTmFhNWdONXBORHNEODV3Zk16TXlzcmpHQTc0Z0VseldTUDVUYkJ5R05EOHFOQXgwQWcwZ1c2QmNiS0JhbEVwYlplWXZYY3ptdjE0bXhjbC9TL2poR3J2NFcxd3kzQXZBMTg0L1c1dWdBeVkzcThaTDJTVG9RQ1Fzc3pwYzFkWkFTRS9NNWVRQ2t4WEZKZStLY0RaSnZRMnJ6YXJZaFhpZDdrYzVyUjlFay9RK0s0OXNEK1BJYThabXRNcExYUkRMY1FGSWZ3UE5xeHpSTkpCK1AxTUswTENJMlJHcFR2Z2p2cjdiQTh2Z0c2WnAxakRRZTZnRWJDWUlnK1VrQTMxOGx3RG1SOUxzeEJ1eEVSVjhnM3Ivbk1jblBpZnVicWd0RVZtTGVZU1UwT3d3QjREOGlBZU5CTTR6UHpNeXM5S0pJUkw4YXdDamVwM0tpT3BEYWhQUW52bWF5Y3M3a2U1K1ptWmt0aGp3eGtOdHFsSS9uYWc1WFZvaHJubDRIYkpvd3lUK0hYcDF3ek16TWJJN2VDT0IrSkM4aXVZUGtIeU10bnV4RU0wYnFJTTNUVDg1MTlDZVNvY3hhSVM4MngrdTdoNVFRY3d3cDhmVlFWS1haaTBnVWpPcHExd0g0dDBnU3UzdXQyRzBtdmp6bWhrOGcvYzc3UUhxZDVBb3prbTVSTWI0TnhUbjVFSm9FN1U3UnVuMk0xRjV4SDhuajhYMzlZY1dRYllIRTYrUUltbzJCZVY3a1FOenVKM2trcW5VUlRnWTBtNnNpcWVmZ0daKzRmTDRLQUNSZEZQY1ZWWGJ6WEszWFYrMXNpRlRGZG0vY0h5RWxrWmF2blNISmx5Q041OXJxMndCY2luVGR2aXNlNndQelNRS2MvRC95QkVLdUFGanVMdXdoU3F3RDZNZUYxSWprMzVDOENNQjk1aEN2bVptdHByejcvU2VCWnZJazNxYzZBSGJHeE1vSXNhc1NFKzlwQlZmU01UTXpXMXhsOGwrdnFKclFqWVdkcTJzRU5VZTNrcFRiUWZXUktrZnNSVE8rTVRNenMvYjRETkxpd0dVeDUvRXdrdTlCVStWdkhXbWVZNFEwUmxvckhoT2lUV284bGlzQkRwRG04aWMzU0pvdG85ejZGeVNQSS80MmNoSU1JakUyRW1WNkFIcHh6RmljRjRDUFJZTE1BK2NkdkUzTkRRQnVFNy9IcTVCK3YwZmljeWVSWGlOZElGV09qSG5qVHBWSUN5U1B4UFVza2M3Uk42RForTmFQajJHOFZzZnBTL2p0QU81UUsyWmJLRG41TDFmMTdRRk5PMFdTaDJLdTRIamN6OG1BZDBLN2t5ck1Gc1ZhdFB4c2t5ZVMvR2VrOGRUaEdHOHhjb0oyd2dtQXRqMXJTRGxrZVhOR250dmZGZGVyZVl6V2k0SnpiZll4cE91UlFmd2NCc0I4a2hUR1d6eTIxUWtyWjJobWVRRWkvN0VQU2Y1OUREQWVPY1g0ek14c3RUMGtKc0x6THNpeUxWNStMeHFqMlFVOGFhdjN0SzNlKzh6TXNqNmFCYlY4RVZKOThuaUtkcUk1TjI2VVlnKytrTGRGTUViekdoMFdsV3hHYUNhOTIvNWEvVHVrdjg4OG1YOVQxV2lteHhzeHpPeDhFZGlVOU9Gck9sdFcxd0Q0WHBJWHgxekg3VW4rVWJTdnpNckUvOGs1amZIRVk4TzRQL204Y29PazJUSTdwVG80MENUQklMMzI4K05ETkd0WStlK2lHOWNUTE5hdmJnWGdBN01NMnFibUx3RGNqT1NlU0VBZ3lad0VuZVVrNlJHd3FSTHFRb3dWSXA0Y2I3NGRJNTJqQnhPUDUrSXNuNGpYNnEvTUs4NEZzS25LSFR3L0JUVEpmOWx3OGdtUkRKdGZQNE40N0tNa3V3RDJJdjBObVhYUC9wU0ZsYytUNWVhV2Vjd3RiZnpNb3ZoSXZwL1hDTHFTZm5JT2NjelRNWksvalVoUUJ6YkdXL2tjazk5LzI1YjRhTk8zYVF4V2pNMEdRS3JhSGZlSFNIL1B0NTVmYVBPbkpIZmY3UUxMTlVGT05Bc3lmeEVEMU5zQWVIZk5vTXpNYkNsOUJNQ1ZNU0grcG5oc0Y1cUwvNFdZeERHejFzcVZNNERORlRqYW92eGV4bWkrUjhJWDhiYjRScEwyeC9FN3FrWXlZNUsrUHQxb0h6WnZnbGhtSFN6WFBJZlpLcGhjWEZ4VU80R05SWWd1dkRCc3krUFZBTzZOcHRMZnJVbitMcG9GVFZmcU1adXRQSWVZcjNXN0pLOGplUmVTT3dBOG8xSmNkbWJmQytBU0FFL04xZlFrN1VMNlBZNndJdU1Ba2o4YWE2M1ByeDNMSEJEcDd6TW4rTzZzR1V3YmtEeEs4dHNBM0FLcExmb25LNGRrY3hiSmF4c0pYVXRxTjlMYTRBRE5adlo1ckErTzR2L3JSdkdSVVZITkxMZWRmOTRjNHBnYmtwZlVqc0ZXUTNUNHk0VXBkcEM4QnNBZm51RkwydUNGY1RzQ3dHV1lIQzkzcUl3azdaYTBUOUp1a2xlVC9GcVhXamN6czIxNklzbUxTSDRaeVg5SHRBQ01pNVc4dXgxd0VxQ1p6ZDVHRmV3NEJ3bnRxZ1lJcE8rbi9KNTIxUXJFN0J3b1d0N3NKM21mMnNITTJGOUp1aXdtUmhDTFhzdk9pUTVtaTJkM2pIVVczUWswMVI5T3dCc1hiREc5SHNCamtCTCtMaUs1ZytTM2tIelhSS1cvTXBIVnIyV3oyUm9EWUx6WDVXcHhSTFFaSnZuQ1dMKzZNNERYMWd2VEFMd1p3SjNpL1BrSEpJK1J2RHAvc3FnaXMwb2JpN29BUVBLWjhUcjlsc3J4ekpMUVhDLzI0V3ZIQzViYkRwSThUUEpEVVgyWUFCNE80RU9WdzJ1N2hVaFVqdVMxTmxTR3p1dUJZMGtYemVuLzdNZi90N0VoTjk2SGNpelh6aW1PZWJsRjNQYlJqdGVNTGJqOHR5d3BiL2o4OXJvUnpkeDNTM3BvSEdzWkJySkVPaUYwa0Jaa2pzV0E0aGlpRkh1VU4vejcyTzI0QThDVGF3WnNabVlMNVRNQTdoQ1Q0eTlIVStsbWpHZ0JHTzhwWXpRN2ZSYmlJc3JNMnFsY0NKZTA5elN0eHBkWnZzWVlGMGxGbEpiaTJzT3NBd0FrRHlGZGI3NnNiamd6OS9pNDdVU2JuMlZYTHV5WTJXTDQ3SktNZFFSZ0VHMWpuRFJsdFgwSXdETUJmRGszK3lhU3I0MkV2eUZTQmU0T21zWENIcHJFQmdHYnJ6M01iUHJ5cHI1aWJoSFkzRUs0ajFUbDU4TWtIeFVKTWw4TzRDM3pqM1lsdlIvQXcwaXVrWHc0eVk4aW5UOVBBT2hIRWhPTGxycDVJK09xYkJBZnhkZ25kMkY3YmJ4R0wwRnpyZGdtaXU5M0FJLzNMbGo4M2VTL281T0l0UldTZjBYeXk0dnozWXRxeHRsU2l6REhtdGZRV0xUZVhFcVNjc1d3M0FKN0huSjc3ZU5JclgvM1JpeDdKSDEyVGpITXl6TklIbzdPSzRQb1NHSTJVL2x2T2Nib1BhUzhnSnZWakdrTzNwQVBGdUZONG15RWRDSWNBK2hFSmNBOWFFbzQ1cEtPSitLeEhzbmZqSW1SaTVCMldQMXhoYmpOekt5dTN3WndnT1FWQUE0anZZK01KUjFBVVdvNzNsZDJvMGdNaENjQnpHeUc0dUllU0VrM1I0R04zYk50bVdRdWR6RG03MVVrYjZ3VWo5bTVXRWRjYTByYVEvTDdLc2N6YTg5SHFvemNsZ200THR6V3lXelI3RUF4aDdmQUNHeE1GSHRUbU0zREVRQi9CdUJGSkM4bTJZc2tsVFdTWDBIeUYwbm1LanI1TlRsQ2M4MUFwRXJiblpqVElOSjh4cWJFaGlWSndqVnJpNzZrQTNGOTMwRWFtdzZRMXE0MnF1Ukh4YXl2UTBxMCtocDQvV3JhcmdKdy82ajRkMWNBNzBBNkx3N2pkOU9QKzRPaStoK1Fyb3N1eHViRTZsV1EyeUFEVWNreWlySDhhYnczRWFrS2JSdXFVckZJOFBGNGJ6cnkzMUVlb3d6UmpFMUE4cU1rZnpyR055VFpROXJvWUJkbWtjNVAzU1VmYng2TDEzQUh6WG1oZTRiblQwMnhIakJpYWsyL0g4QlhBamd3ai85L1RvNERlQVVBa1B3YzB1dmxjTjJRYkZVVUcrSk9JdjdPME01TkRoc2tDUUFYZnBBVGJYOVA5K1pCcEVUR0hVaS92Tk10bkc3c2lKUjBXd0RmQWVESDRaWmtabVp0OUJDU2IwSWFxSStLeDRsbUovd2VramROZkg3RFdkNTd6TXd1V0ZRQXpEdk55OGZia0lUODh5U2ZqYTNINWoxRUcyU3pCZGRIbXFqcVN2b0pBTStwRzg1TS9TM0pCOVlPWWxwYWNoNDFhNU5ua254KzdTQzJvWU0wdjdneFR2SDV4QzdBQ1FEL2daVFljeExBQzVFV0hZNGh2ZGJXa1pMV3Q1eVRtRkJXcFNLYXVZNHp2VDd6ODdUTi84UE1Ma3dQNlc5MXEvWjJsSFJ4TWMvWWpYbkhHekZ4YlJ6SkFBOEE4R3dBWHozRGVOdm9OUUIrdGtpZXp2SjEzU25uekpnZlBvck5yUW56L0hGZWUyekxaczNUeWQ5dlY5S3ViVlRBNmlKVkQ3d1N3SGRoaWE2VEk1a3g2K0hNYThxMlRWRzliQ2ZKejJQelJnVVZ0MEE2Rjk0ODFtUUdFLy9HSGdCZkMrQnhBTDV6TG9FdnVZblg4MEpZNW11bjR1ZVpiMmQrL3BkMGdPUkJOTVZKeGtqSjZEZk44ditkdC9qWmxuazZlMXZTaWNTV3gwYXVRRjc3bC9UL2tEYml0Tld6Ris1TjRneDYySHJpb2h4RTVEYU9aZGwxb0dpQkVNL2ZXWHpkQ09ta2VpV0Erd0g0RnFRTExRQzRBV2szbHBtWkxiWVBBWGdVeVg5Rm1yUzRxTmk5VTdiR3liZDUwcjI4TU9uSDdWWVRkbVptMDFaZWZPU0o1N1pjNkQrUzVPdVJ4dVVETkJNb3d1YkpkYk9GRTMrUFE4VHVkY1NDdTZUMXVwSE5Ga20yWVJORTdQRDgzMml1NmMyc3Z1OG4rWkxhUVd4SE1TYkxpNUZlbkZoZDYyaTZ6Z0RBTVFCL0NPQTZBRGNIY0QzSlgwSmE3OXlYRjdUTDk5SjQvRENhdWVnVGFCWVV5M2tLRk05QlBKN0hIVHVSa2xQTDVKUnlVYktMWnQ2N2k4M3ozV1pXUjAvU0pVaUp2N25LWFA3YkJVNmRqOHpyWGlmaWZsblZlaXpwOFVqSlZ2ZVpXY1RMNlkwQVhoNXpEOERtaEM0aXpRLzNJdGx5SFBjdkpmbnZTRC9YalFSQVNUc25FaElvNlpLSktvRnR0ZFZHelY3OFRJNU5mSDdqK2hqcFBlZVVEWjZTTGdQd0ZRRHVCdUMyQUo2QTVuMnZ0cjNsT0c5RmZyL3psTmRoTm8xQklrbHdQRG5YVUZRS25KeUQyQ29Yb0N2cENRQytCR2xNOWlnQWQ4SnFyK0h2WFlEWGNKN2J6dWZjWlozVGZpdUFiNHh1TnZuN21XZENZeGN4M3BmMEVRQjNuT1AvUFdzSG92b2ZVQ1FHdDJIKzBaWkMzcml3aCtTTnNkbmhXQjRETEhQaThuWXNTeExnNUFtM0hBU1ViekxsSk1oV0orbGN2bldyaVpDdEVrSmNxY1Myb3p5SjVFRlhSOUxKbWtHWnJZaFhrUHd1NE5UcWZSUDN5NlNUY3JKOTh1SzBURlF4TTV1VlBIN041Nk0rMHBpekZUdVFpd3VwZkI3T2k1cGVqTFJsTXZsM1dsYmhXVm9UNDZQeWVuZXlndkpTSzNaVWw1VS81ajJSYTdacXRycVdtanlYTHJKOHpaZ1RxWVp4emp3Qnp3MnVpcTZreVhabStiMmpUSHdvTjdaTXZuK1c5L1BYbEk5TmZsMU9NanpiYTJ5ck9lb3RGOXNuUGo4NTEyMW0wMWUreDUxdXZEbjVONXdUZUxkVGFTaS9MNTBFc0M3cGRnQytEVXRVZ1cxS1hnVGd0MGwrQkZ2L2pNdTF6azAvMXkwU3ZpYlA1Zmw1dTBtT2tNNnJLN09CTVpMV1A0LzBNOWw0clJZL3QvTDlwaHp2YmFyeWhzMi9sMDVlYkMvK245MEExa2plZ1BtK04wMG1OZWExNVpYNUhjOVFXWUJoY25QRFZyL2pQcHFXd2FXOGRsOFc5QUd3YVZQRnh2cCtVVW1zUFA5T3J2KzM2ZnEvTEc0MExING10Wlh6WlhsK2U0RGx1UFlEY09vbXNDMnF3ODc2Lzk5UDhsRGNQZDNZdm94bjJjNWJrOWZXeDlDeStVZGJhSk9iRnZKcjcweGRCSmNsUVhXckRSbWI1aGFXSlFuUWJKRnRPWmhzZXdheFdXVmZRL0s5dFlNd016TXpNek16TXpNenE2Z2o2VHNBM0I3QVQ5VU81Z0s5SDhCZkFIZ2R5US9VRGNYTXpNek1iUGs0Q2REc3dqa0owR3crUGdQZ1BpU3ZXcURkVG1abVptWm1abVptWm1ZMTVNcHQrWGFqQWxPdWFDdnBBSUN2UTJxbCtRQUE5NmdVS3dCY2c5UmUvWG9BLzBqeW45RlU3Z1phVW9IZHpNek16S3dXSndHYVhUZ25BWnJOMXFzQmZGKzBsdHdMWUJmSjYyc0haV1ptWm1abVptWm1acllJaWhabWViMmloOVJHZUR5eG9Yb3lVZkNNYmM4aWlmQStBTDRDd0MzaTN6eUcxRXJ0dHlmbmFhUHRLN2I0ZHp1U2JrN3lVTkhPTTl0cXJYSTc3WkxOek16TXpLemdKRUN6Qytja1FMUFp1QnZKandJWUFPaEp1b1Rrb2ZoYzN0MXFabVptWm1abVptWm10b3FJU0phVHRJZmtVVFR6cHVXNlJSY3BhYThUbngvRTgyL0Uxb2wyaks4NTAveHJGOEFKQUd1UlRIaFRmbjdjWDQ5L3U0TTB2MXZhU0VROHkvZm1OUll6TXpNenMzUGdKRUN6Qytja1FMUHB1aFBKandGQVRFYWR3UGxORkptWm1kbi8zOTc5aEZpV25uVUEvcjE5YStwbWFpclYyRXpEUkNFSWdpQVpGd1BSTWFJNGFJaHhvV2lJcTRnQklTQmtJUUhkWkNGQ2RLRWl1TktGSU9MU1RZU1l4VGpFa0lWRUVwVVFuWUNLaVlsQm93NGowOVBwdHFxNzZuVnh6cDA2ZmJ1NmUzcHVWZDM2OHp4d09PZDg5enZuZmxWOTZ6YlUvZFg3QWdBQWNKbTlFUlI4eEp6TjhYZzUrTGU0Zm1NOHYzdkV2V2JqdHZlQWUvZlMrWk9UZXkwczdua3dHZk1aQ3dBQVBBWWhRRmlkRUNDczd2TlY5Y1BKZzl0UWpLMG5kc2UvYUFVQUFBQUF1TFRHMzZQZXlXRXc3NmpQS3BZckF1NlAyenhEYU8rb3p6RXF5Uk1aS3YwOTdIT096U1Btekx2N2lTUlhxdXIxOFQ1N1NiWXkvS0gzby82NGUvcTVwYzlZQUFEZ01RZ0J3dXFFQU9HdCsxaFYvZjd5WUhkZnE2clh1bnM3eWF5cS9qZjMvcHd0V2xnQUFBQUFBREJZZk82M3FQNDMvVDNxZzFyc0xrSi9HYTg1R09kTlE0UFRleWYzQmdzWDkzMVlhSEFSQWx6c3B4VUJGOCs3cUF4NGtFZFhMd1FBQUpZSUFjTHFoQURoOGJ5ZTVQdXI2aHM1L0dYUzN0ajY5MUZWL3JiRy9YSjdZQUFBQUFDQXkyYWVaSGZTWFdXZWUxdjZUcytYcS9ETnh2MGk5TGV3K095d0ovTm11VC9rdC96WnlIVGVOSHpZaytkZXJPZFI0VVIvQkE0QUFJOUpDQkJXSndRSWI4NkxWZldCSkxlNis1bXErdGE2RndRQUFBQUFBQUFBY041ZFdmY0NBTGp3UGx5RDl5OEdCQUFCQUFBQUFBQUFBSTZIU29Dd09wVUE0WDY3U2I2enFyNmQ1RzZTalF6dEd6cEp1dnRxVmIyMnh2VUJBQUFBQUFBQUFGd0lLZ0VDY0p4ZUdxdis3VlRWcXhuQ2dQdmovbzFnckFBZ0FBQUFBQUFBQU1EeEVBSUU0RGg4cEtvMnF1cDlTYmFTM0VreUc3ZXBXWkxOSThZQkFBQUFBQUFBQUhnTHRBT0cxV2tIekdYMmJGVzluQ0hZdDVjaDNIZVFlMzhtbHYrdjhiTUJBQUFBQUFBQUFIQk1WQUlFNEhGOXBnNTliUnpieXhBRTNNL3dmMHRscUFnNHl4RDZtMjZKU29BQUFBQUFBQUFBQU1kQ0NCQ0FOK3MzcXVwS1ZiMDNoOVg5Ym1jSS8wM3RqL3RiaytOWjdxMEllSEJpcXdRQUFBQUFBQUFBdUVTMEE0YlZhUWZNUmZlVFZmV1hHVjdyVjNJWTdBTUFBQUFBQUFBQVlNMDIxcjBBQU02a3Y2MnFIOHk5QWRmT0dBRHM3cDJxdXJHV2xRRUFBQUFBQUFBQThBYnRnQUdZK3BVYS9FQ1NKekswK3AyTjI5YTRSUUFRQUFBQUFBQUFBT0JzVUFrUWdEdEozbDFWWCs3dWQrYXd4ZlhlMHJ4YjQzNHpRMFZBYllFQkFBQUFBQUFBQU5aTUpVQ0F5K3ZGSk5lcmFqUEpxMG1xcXI3UjNVOU41c3k2KzJwM2IwL0dsc09CQUFBQUFBQUFBQUNzU2ExN0FYQUJMS3FtM2FPNzd4dURNK0wzcXVwWHgrUFp1Ti9QNFd0NW5tUzN1N2VyNnVia3VzclFJbmcveVVHT2VOMERBQUFBQUFBQUFIQzZoQUJoZFVLQW5BZXZKM2wvVlgwK1F6dmYzY2xqTlZiL20xWFZhMGt5Q1FCdVptZ2R2NzkwRFFBQUFBQUFBQUFBWjRBUUlLeE9DSkN6N0srcTZxZXlWTDJ2dTY4bDJWdFUrcHVFL2lwRHEvajk4ZnJsMS9mbStOaCtBQUFBQUFBQUFBQllPeUZBV0owUUlHZlJKNnJxMTllOUNBQUFBQUFBQUFBQVR0Ykd1aGNBd0xGNkljbmZWZFh0ZFM4RUFBQUFBQUFBQUlDVEp3UUljUDU5cWFyZW5hRkY3MmFTdlRXdkJ3QUFBQUFBQUFDQVUzSmwzUXNBNEMzN2FGVmRxYXJudXZ0YWhnRGduZTYrdXU2RkFRQUFBQUFBQUFCd09tcmRDNEFMb0pMMDhtQjMzemNHeCtROVZmWGw3dDVJY2xCVk44ZnhXWktESFBGNkJBQUFBQUFBQUFEZ1loSUNoTlVKQVhJYXZsQlZQNVRodGZabVd2NXFDd3dBQUFBQUFBQUFjQWxvQnd4d3R2MVdEWjdQRU95YkpkbnY3dTNGaE83ZVNUSmZPaGNBQkFBQUFBQUFBQUM0QkZRQ2hOV3BCTWhKZUtHcVB0ZmRPMVYxSTBNQThFN3VmYTF0SmJrMU9aOG4yUjJQWjBuMlQyV2xBQUFBQUFBQUFBQ3NqVXFBQUdmSGw1Sjg5MWo1NzR0Sk1nWUFrNkd5MzNLdzlOYlMrZTdrV0FBUUFBQUFBQUFBQU9BU0VBSUVXTC9memhEK2U2NnF2cDZodXVSeXdBOEFBQUFBQUFBQUFPNnpzZTRGQUZ4aVAxcFZmNThoOExkb3o3N1ozVytiVkFBRUFBQUFBQUFBQUlBSFVna1E0SFI5SWNuM1ZGVmxhUCs3cVBpM2FQVjdwNnBlWDhmQ0FBQUFBQUFBQUFBNGY0UUFBVTdISjZwcVhsWFBWOVZYazh5cjZtYVNXWGZ2SkptUDh6ckRlL1A4UVRjQ0FBQUFBQUFBQUlDRmV2UVU0QkVxaDFYYzN0RGQ5NDF4S2IxUVZaL0wrRHJwN3UycXVwMWsvNGk1OHlTekhGWUhCQUFBQUFBQUFBQ0FoeElDaE5VSkFiTHNkcEozVnRVclNkTGQxNnJxdFF6QnY5bTQzeHJuUFpGa2IrbjY2dTZkOFJvQUFBQUFBQUFBQUhnZzdZQUJqczhmVmRXVnF0cXFxaHNaQW45VlZhL21zUExmWW44N1EzaDBHZ0RjSFBjOVhnOEFBQUFBQUFBQUFBK2xFaUNzVGlWQVBseFZmem9lejVJYzVJalhCQUFBQUFBQUFBQUFITGVOZFM4QTRKejZyeVRQVmRWL1RzWXFod0hBUmR0ZkFBQUFBQUFBQUFBNE1kb0JBenllUDZ6Qk0xWDEzMG5tM2IzZDNUc1ozbE1YRlFBRkFBRUFBQUFBQUFBQU9IRXFBUUs4T1Q5ZFZYK1JaQ3RKdW51bnFtNGsyYStxM2NtOHloQUcxQklZQUFBQUFBQUFBSUFUVit0ZUFGd0FsU1BDWHQwdEFIYitmUzNKZTZ2cXEwazJrK3psL24vdldYYy9XVlYza3V3ZWNROEFBQUFBQUFBQUFEZ3gyZ0VEM08rbHNlWHZzMVgxMWJIVjcwSjM5OU9UODRPcXVwbDdBNEN6REtGQkFBQUFBQUFBQUFBNFVVS0FBSWQrZmd6L3ZhKzd0NVBjVGpKZnRQM3Q3bXRKVWxXdkpOa2E1eXplUnl2SlBFTUFjRDlEMVVBQUFBQUFBQUFBQURoUjJnSEQ2clFEUHQ5ZVR2TCtxdnBtRHQ4VG44aGhpRzhSNnB1UFk1MWtLOG10cGZzc3Z3NFc3WU1CQUFBQUFBQUFBT0RFQ0FIQzZvUUF6NmZQVk5WNzE3MElBQUFBQUFBQUFBQlloWGJBd0dYenkyUExYd0ZBQUFBQUFBQUFBQURPdlkxMUx3RGdGTnhKOGx4VnZid1k2TzdyVmZVL2Exd1RBQUFBQUFBQUFBQ3NUQ1ZBNENKN3FhcWVxcXJOSkY4ZngyWkpOZ1VBQVFBQUFBQUFBQUM0Q0lRQWdZdm9RMVcxVVZVL20rUldrcXFxYjA4ZTMrdnU2K3RaR2dBQUFBQUFBQUFBSEo5YTl3TGdBcWdrdlR6WTNmZU5jYUttTFg5blNRN0c4VTR5Nys0bnF1cm0ybFlIQUFBQUFBQUFBQUFuUUNWQTRMejcxS0xsYjFYOVM1SjVrdjBNNGIvdTdxZVQ3STRCd00zeDhjMXhIQUFBQUFBQUFBQUF6alVoUU9DOCtrZ05QcGprN2ppMm4yUjNQSjUzOTlXcWVpVkp1dnVaSkh0SmRydDdaekVPQUFBQUFBQUFBQURubVhiQXNEcnRnRS9YdTZycUswbTJrdHhhOTJJQUFBQUFBQUFBQUdDZFZBSUV6b05QVnRYR1dQbnZLOTE5TFFLQUFBQUFBQUFBQUFBZ0JBaWNhUjlLY3JXcVBwQmt2N3Zma1NSVjlXcUdTb0FBQUFBQUFBQUFBSENwYVFjTXE5TU8rSGk5bnVSSHF1cWZrdXlPWTVzWnZzOTNrK3l2YTJFQUFBQUFBQUFBQUhEV3FBUUluQldmcnFwNVZYMUhWZjFEa3IwazZlNmRETUcvM1F6VkFKOGUyd0VEQUFBQUFBQUFBTUNsSndRSXJOdkhxdXB0R1ZyLzduWDNVem1zckZoVmRTTkQrRzk3UEg5bGJBYzhXOU42QVFBQUFBQUFBQURnek5BT0dGYW5IZkJiODY2cStyY2t0NDU0YlBFOW5ZM2IzbUtzdTdlcjZ1YXByUklBQUFBQUFBQUFBTTR3bFFDQjAvVFhTZDVlZzMvTkVBQ2NMeDVjdFBrZHF3RW1ReHZnL1hGc0owa21BY0EzcmdNQUFBQUFBQUFBZ010S0pVQlluVXFBai9aclZmVUhHVUovUjM2L0FBQUFBQUFBQUFDQXg3ZXg3Z1VBRjlyM1ZkWFhrdXlPNTdNa0IrUHhab1kydndBQUFBQUFBQUFBd0Z1a0hUQnczRDQ5dHZ1ZGp3SEFkUGQyZDIrUGp5K3FBQW9BQWdBQUFBQUFBQURBaXJRRGh0VnBCeno0YUZYOVNaSzc0L2wraHFwL3k5K0gyYmdKQVFJQUFBQUFBQUFBd0lwVUFnUldjVFBKQzFWVlNmNHN5YTBNNGI2TkRDSEFUckk1VmdIY3pCQ1lQSWdBSUFBQUFBQUFBQUFBSEF1VkFHRjFsN0VTNEplcTZ0M2QvVlJWM2MwUS9sdVlaL2grUEN6b3B4b2dBQUFBQUFBQUFBQWNBNVVBZ2NmeHUxVTFyNnJua2h4VTFZME1BY0RON3I2ZUlSQzVteUhjTngrM1JkaTRNbFFEbkdXb0VpZ0FDQUFBQUFBQUFBQUFLMUlKRUZaM0dTb0Iva3hWZldvOG5tVm82ZHNadnZZbmMxZ0pjSjdrYm9hUTN6eERJRERqdkNkeWIvQnYramdBQUFBQUFBQUFBUEFXQ0FIQzZpNXFDUEJUU1g0cHlmOVYxZTBNd2I3azhIM2p2SDk5QUFBQUFBQUFBQUJ3N21rSERDejcrTmp5OTROVmRhdXE5bklZQUFRQUFBQUFBQUFBQU02UWpYVXZBRGd6M2xOVmY5UGQyK1A1WHBJN1VmRVBBQUFBQUFBQUFBRE9MSlVBNFhKN0tjbXpOZmhpa3ZuWStuZHZmUHhCQVVEQlFBQUFBQUFBQUFBQU9BT0VBT0Z5K25oVlZaSmZyS3FYazlSWUFYQTN5WDUzWCszdXB5ZnphN0lKQUFJQUFBQUFBQUFBd0JsUjYxNEFYQUJIQnVPNit5eUc1WDZpcWo3YjNUdEpVbFd2SlpsMTk5V3FlbldjczVuRFNvREo4UFV0QXNQN3A3ZFVBQUFBQUFBQUFBRGdVVlFDaEl2dnhTVHZTSEs5cWo2YnBLdnF4aGdBVEhjL3VRZ0FqdFVBOThianEwdjNPVmc2RnlJR0FBQUFBQUFBQUFEZzNEc3lETmZyOXp0Slp1UDZacE9selpKc1RkYTVzL1JZbHVZLzZHdGNuZ01BQUFBQUFBQUFBSnd5bGJ4Z2RXZXRIZkRQVmRXZnIrbTVBUUFBQUFBQUFBQ0FVN1N4N2dVQXgrSS9ranhmVmQrY2pHMW1iTzBMQUFBQUFBQUFBQUJjVEZmV3ZRQmdKWitzcXJkVjFYY2wyYy9Zb25lcHhTOEFBQUFBQUFBQUFBRHdBRWUyMWU2VDlRdVQ1N2srT2I2V1pPc1V2bVlBQUFBQUFBQUFBT0FNT0RLOEJEeVdTdExMZzkxOTM5aUs3aVI1dHFyK09VUEZ2LzNKYzFkM3Y3MnFib3h6NTBudWpuTUFBQUFBQUFBQUFJQUxTanRnT1B0ZXJNRm1rbTkxOTNhUy9iSHEzNU1adzd5VEFHQXloQVJucDc5VUFBQUFBQUFBQUFBQU9GOU9xaDN3ajNmM001UDdQVDBHQUIvMC9MUHUzcG1NYXdzTUFBQUFBQUFBQUFBQWozQ2NJY0IvN083dlhiclZQTW5tMHZOdFpxajBWN20vNnQ5c3ZBWUFBQUFBQUFBQUFBQjRoR2xBYjJ0czAvdTRJY0EvN3U3cmsvdG81UXNBQUFBQUFBQUFBQUFuN0kyd1huZS9ZM0s4L1NiRGYrOWFoQWFuMStiZVlDRUFBQUFBQUFBQUFBQndFcnA3Wnp6Y3lxUU43ME9DZi84K0J2OFdjemZIYTVlRGYwZTJHUVlBQUFBQUFBQUFBQUNPeHlLb04xc2NQNlFkOEc4bW1VMUNndzh6eXhBTUJBQUFBQUFBQUFBQUFFN0syTDUzMFJhNEp1TUxQemFlWHovaTh0bGsyeHczRlFBQkFBQUFBQUFBQUFEZ2xNeW1KOTM5em5IL2RDYnRnWmV2R2NPREQvT2dhd0VBQUFBQUFBQUFBSklrL3cvL01JQy9jWXZaNXdBQUFBQkpSVTVFcmtKZ2dnPT0iOwoKLyoganNQREYsIGxvYWRlZCBvbiBkZW1hbmQgKG9ubHkgd2hlbiBhIHZpc2l0b3IgZG93bmxvYWRzIHRoZWlyIHJlcG9ydCksIGZyb20KICAgdGhyZWUgQ0ROcyBpbiB0dXJuIHNvIG9uZSBibG9ja2VkIGhvc3QgZG9lcyBub3QgY29zdCB0aGVtIHRoZSBQREYuICovCmxldCBfanNwZGZQcm9taXNlID0gbnVsbDsKZnVuY3Rpb24gbG9hZEpzUERGKCkgewogIGlmIChfanNwZGZQcm9taXNlKSByZXR1cm4gX2pzcGRmUHJvbWlzZTsKICBjb25zdCBTUkNTID0gWwogICAgImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2pzcGRmLzIuNS4yL2pzcGRmLnVtZC5taW4uanMiLAogICAgImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanNwZGZAMi41LjIvZGlzdC9qc3BkZi51bWQubWluLmpzIiwKICAgICJodHRwczovL3VucGtnLmNvbS9qc3BkZkAyLjUuMi9kaXN0L2pzcGRmLnVtZC5taW4uanMiLAogIF07CiAgX2pzcGRmUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGxldCBpID0gMDsKICAgIChmdW5jdGlvbiBnbygpIHsKICAgICAgaWYgKGkgPj0gU1JDUy5sZW5ndGgpIHsgX2pzcGRmUHJvbWlzZSA9IG51bGw7IHJldHVybiByZWplY3QobmV3IEVycm9yKCJqc1BERiB1bmF2YWlsYWJsZSIpKTsgfQogICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICBlbC5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwogICAgICBlbC5zcmMgPSBTUkNTW2krK107CiAgICAgIGVsLm9ubG9hZCA9ICgpID0+ICh3aW5kb3cuanNwZGYgJiYgd2luZG93LmpzcGRmLmpzUERGKSA\/IHJlc29sdmUod2luZG93LmpzcGRmKSA6IGdvKCk7CiAgICAgIGVsLm9uZXJyb3IgPSBnbzsKICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCk7CiAgICB9KSgpOwogIH0pOwogIHJldHVybiBfanNwZGZQcm9taXNlOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc3JjL2NhbGMvZW5naW5lLmpzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBBRkNfRElWSVNPUiA9IDE5NTcuNTsgICAgICAgICAgLy8gTkhTIEFmQyBob3Vycy95ZWFyCmNvbnN0IFNISUZUX0hPVVJTID0gODsKY29uc3QgQkFOS19PTkNPU1QgPSAwLjIwOyAgICAgICAgICAgIC8vIGFmZmVjdHMgZHV0eSBjb3VudHMgb25seSwgbm90IGNhc2ggaGVhZGxpbmUKLyogQW5udWFsIFNtYXJ0IE1hdGNoIChCYW5rU3RhZmYrKSBsaWNlbmNlIGZlZSwgZXggVkFULCBiYW5kZWQgYnkgdGhlIG51bWJlciBvZiB3b3JrZXJzCiAgIG9uIHRoZSBiYW5rIHJlZ2lzdGVyLiBTdXBwbGllZCBwcmljZSBsaXN0IG9mIFNlcHRlbWJlciAyMDI2LCB3aGljaCBzdXBlcnNlZGVzIHRoZQogICBlYXJsaWVyIEctQ2xvdWQgYmFuZCBsaXN0OiBpdCBpcyB+MTQuNSUgbG93ZXIgYXQgZXZlcnkgYmFuZCB0aGUgdHdvIHNoYXJlLCBhbmQgdW5saWtlCiAgIHRoZSBvbGQgbGlzdCBpdCBpcyBjb250aW51b3VzLCBzbyBubyBiYW5rIHNpemUgaGFzIHRvIHJvdW5kIHVwIHRocm91Z2ggYSBnYXAgYW55IG1vcmUuCiAgIEVhY2ggcGFpciBpcyBbaW5jbHVzaXZlIHVwcGVyIGJvdW5kLCBhbm51YWwgZmVlXSwgYXNjZW5kaW5nLiBUaGUgcHVibGlzaGVkIGxpc3QgZW5kcyBhdAogICAxMDAsMDAwIHVzZXJzOyBhYm92ZSB0aGF0IHRoZSB0b3AgZmVlIGlzIGhlbGQgYW5kIHRoZSByZWFsIGZpZ3VyZSBpcyBxdW90ZWQgbWFudWFsbHksCiAgIHdoaWNoIGlzIGFsc28gd2hlcmUgdGhlIGJhbmstc2l6ZSBzbGlkZXIgc3RvcHMsIHNvIHRoZSB0d28gYWdyZWUgZXhhY3RseS4KICAgQXV0by1saW5rZWQgdG8gYmFuayBzaXplLCBlZGl0YWJsZSBpbiB0aGUgZGV0YWlsZWQgYnVpbGQuICovCmNvbnN0IExJQ0VOQ0VfQkFORFMgPSBbCiAgWyAgIDYwMCwgICA4MTA4XSwgICAvLyAxLTYwMAogIFsgICA3MDAsICAgODQyM10sICAgLy8gNjAxLTcwMAogIFsgICA4MDAsICAgODczM10sICAgLy8gNzAxLTgwMAogIFsgICA5MDAsICAgOTE1NV0sICAgLy8gODAxLTkwMAogIFsgIDEwMDAsICAgOTY3Nl0sICAgLy8gOTAxLTEsMDAwCiAgWyAgMTEwMCwgIDEwMDk4XSwgICAvLyAxLDAwMS0xLDEwMAogIFsgIDEyMDAsICAxMDQyMV0sICAgLy8gMSwxMDEtMSwyMDAKICBbICAxMzAwLCAgMTA3MjVdLCAgIC8vIDEsMjAxLTEsMzAwCiAgWyAgMTQwMCwgIDExMTE1XSwgICAvLyAxLDMwMS0xLDQwMAogIFsgIDE1MDAsICAxMTM1MV0sICAgLy8gMSw0MDEtMSw1MDAKICBbICAxNjAwLCAgMTE2MTJdLCAgIC8vIDEsNTAxLTEsNjAwCiAgWyAgMTcwMCwgIDExOTM3XSwgICAvLyAxLDYwMS0xLDcwMAogIFsgIDE4MDAsICAxMjE3MF0sICAgLy8gMSw3MDEtMSw4MDAKICBbICAxOTAwLCAgMTIzNzRdLCAgIC8vIDEsODAxLTEsOTAwCiAgWyAgMjAwMCwgIDEyNDgwXSwgICAvLyAxLDkwMS0yLDAwMAogIFsgIDIyMDAsICAxMjk2NF0sICAgLy8gMiwwMDEtMiwyMDAKICBbICAyNDAwLCAgMTM1NDddLCAgIC8vIDIsMjAxLTIsNDAwCiAgWyAgMjYwMCwgIDE0MzUzXSwgICAvLyAyLDQwMS0yLDYwMAogIFsgIDI4MDAsICAxNDczM10sICAgLy8gMiw2MDEtMiw4MDAKICBbICAzMDAwLCAgMTUyNjVdLCAgIC8vIDIsODAxLTMsMDAwCiAgWyAgMzIwMCwgIDE1NzI3XSwgICAvLyAzLDAwMS0zLDIwMAogIFsgIDM0MDAsICAxNjEwMl0sICAgLy8gMywyMDEtMyw0MDAKICBbICAzNjAwLCAgMTY0MDZdLCAgIC8vIDMsNDAxLTMsNjAwCiAgWyAgMzgwMCwgIDE2OTMyXSwgICAvLyAzLDYwMS0zLDgwMAogIFsgIDQwMDAsICAxNzQxOF0sICAgLy8gMyw4MDEtNCwwMDAKICBbICA0MjAwLCAgMTc4NjRdLCAgIC8vIDQsMDAxLTQsMjAwCiAgWyAgNDQwMCwgIDE4MTc4XSwgICAvLyA0LDIwMS00LDQwMAogIFsgIDQ2MDAsICAxODQ0NF0sICAgLy8gNCw0MDEtNCw2MDAKICBbICA0ODAwLCAgMTg4ODddLCAgIC8vIDQsNjAxLTQsODAwCiAgWyAgNTAwMCwgIDE5MzAxXSwgICAvLyA0LDgwMS01LDAwMAogIFsgIDUyMDAsICAxOTQ4Ml0sICAgLy8gNSwwMDEtNSwyMDAKICBbICA1NDAwLCAgMTk2OTVdLCAgIC8vIDUsMjAxLTUsNDAwCiAgWyAgNTYwMCwgIDIwMDA4XSwgICAvLyA1LDQwMS01LDYwMAogIFsgIDU4MDAsICAyMDM2Ml0sICAgLy8gNSw2MDEtNSw4MDAKICBbICA2MDAwLCAgMjA2OTJdLCAgIC8vIDUsODAxLTYsMDAwCiAgWyAgNjUwMCwgIDIxNjEwXSwgICAvLyA2LDAwMS02LDUwMAogIFsgIDcwMDAsICAyMjgzOF0sICAgLy8gNiw1MDEtNywwMDAKICBbICA3NTAwLCAgMjQxMjRdLCAgIC8vIDcsMDAxLTcsNTAwCiAgWyAgODAwMCwgIDI0ODczXSwgICAvLyA3LDUwMS04LDAwMAogIFsgIDg1MDAsICAyNTc0NV0sICAgLy8gOCwwMDEtOCw1MDAKICBbICA5MDAwLCAgMjY2MTJdLCAgIC8vIDgsNTAxLTksMDAwCiAgWyAgOTUwMCwgIDI3MzQ5XSwgICAvLyA5LDAwMS05LDUwMAogIFsgMTAwMDAsICAyODA4Ml0sICAgLy8gOSw1MDEtMTAsMDAwCiAgWyAxMDUwMCwgIDI4ODc4XSwgICAvLyAxMCwwMDEtMTAsNTAwCiAgWyAxMTAwMCwgIDI5Mzc0XSwgICAvLyAxMCw1MDEtMTEsMDAwCiAgWyAxMTUwMCwgIDMwMDYxXSwgICAvLyAxMSwwMDEtMTEsNTAwCiAgWyAxMjAwMCwgIDMwNzg4XSwgICAvLyAxMSw1MDEtMTIsMDAwCiAgWyAxMjUwMCwgIDMxNDY2XSwgICAvLyAxMiwwMDEtMTIsNTAwCiAgWyAxMzAwMCwgIDMyMTc5XSwgICAvLyAxMiw1MDEtMTMsMDAwCiAgWyAxMzUwMCwgIDMyODUwXSwgICAvLyAxMywwMDEtMTMsNTAwCiAgWyAxNDAwMCwgIDMzNTUxXSwgICAvLyAxMyw1MDEtMTQsMDAwCiAgWyAxNDUwMCwgIDM0MjE0XSwgICAvLyAxNCwwMDEtMTQsNTAwCiAgWyAxNTAwMCwgIDM1MDI2XSwgICAvLyAxNCw1MDEtMTUsMDAwCiAgWyAxNjAwMCwgIDM2OTY4XSwgICAvLyAxNSwwMDEtMTYsMDAwCiAgWyAxNzAwMCwgIDM4NTQ0XSwgICAvLyAxNiwwMDEtMTcsMDAwCiAgWyAxODAwMCwgIDQwMTIyXSwgICAvLyAxNywwMDEtMTgsMDAwCiAgWyAxOTAwMCwgIDQxNzAzXSwgICAvLyAxOCwwMDEtMTksMDAwCiAgWyAyMDAwMCwgIDQzMjg2XSwgICAvLyAxOSwwMDEtMjAsMDAwCiAgWyAyMTAwMCwgIDQ1NDUwXSwgICAvLyAyMCwwMDEtMjEsMDAwCiAgWyAyMjAwMCwgIDQ3NjE0XSwgICAvLyAyMSwwMDEtMjIsMDAwCiAgWyAyMzAwMCwgIDQ5Nzc5XSwgICAvLyAyMiwwMDEtMjMsMDAwCiAgWyAyNDAwMCwgIDUxOTQzXSwgICAvLyAyMywwMDEtMjQsMDAwCiAgWyAyNTAwMCwgIDU0MTA3XSwgICAvLyAyNCwwMDEtMjUsMDAwCiAgWyAyNjAwMCwgIDU2MjcxXSwgICAvLyAyNSwwMDEtMjYsMDAwCiAgWyAyNzAwMCwgIDU4NDM2XSwgICAvLyAyNiwwMDEtMjcsMDAwCiAgWyAyODAwMCwgIDYwNjAwXSwgICAvLyAyNywwMDEtMjgsMDAwCiAgWyAyOTAwMCwgIDYyNzY0XSwgICAvLyAyOCwwMDEtMjksMDAwCiAgWyAzMDAwMCwgIDY0OTI5XSwgICAvLyAyOSwwMDEtMzAsMDAwCiAgWyAzMTAwMCwgIDY3MDkzXSwgICAvLyAzMCwwMDEtMzEsMDAwCiAgWyAzMjAwMCwgIDY5MjU3XSwgICAvLyAzMSwwMDEtMzIsMDAwCiAgWyAzMzAwMCwgIDcxNDIxXSwgICAvLyAzMiwwMDEtMzMsMDAwCiAgWyAzNDAwMCwgIDczNTg2XSwgICAvLyAzMywwMDEtMzQsMDAwCiAgWyAzNTAwMCwgIDc1NzUwXSwgICAvLyAzNCwwMDEtMzUsMDAwCiAgWyAzNjAwMCwgIDc3OTE0XSwgICAvLyAzNSwwMDEtMzYsMDAwCiAgWyAzNzAwMCwgIDgwMDc5XSwgICAvLyAzNiwwMDEtMzcsMDAwCiAgWyAzODAwMCwgIDgyMjQzXSwgICAvLyAzNywwMDEtMzgsMDAwCiAgWyAzOTAwMCwgIDg0NDA3XSwgICAvLyAzOCwwMDEtMzksMDAwCiAgWyA0MDAwMCwgIDg2NTcxXSwgICAvLyAzOSwwMDEtNDAsMDAwCiAgWyA0MTAwMCwgIDg4NzM2XSwgICAvLyA0MCwwMDEtNDEsMDAwCiAgWyA0MjAwMCwgIDkwOTAwXSwgICAvLyA0MSwwMDEtNDIsMDAwCiAgWyA0MzAwMCwgIDkzMDY0XSwgICAvLyA0MiwwMDEtNDMsMDAwCiAgWyA0NDAwMCwgIDk1MjI5XSwgICAvLyA0MywwMDEtNDQsMDAwCiAgWyA0NTAwMCwgIDk3MzkzXSwgICAvLyA0NCwwMDEtNDUsMDAwCiAgWyA0NjAwMCwgIDk5NTU3XSwgICAvLyA0NSwwMDEtNDYsMDAwCiAgWyA0NzAwMCwgMTAxNzIxXSwgICAvLyA0NiwwMDEtNDcsMDAwCiAgWyA0ODAwMCwgMTAzODg2XSwgICAvLyA0NywwMDEtNDgsMDAwCiAgWyA0OTAwMCwgMTA2MDUwXSwgICAvLyA0OCwwMDEtNDksMDAwCiAgWyA1MDAwMCwgMTA4MjE0XSwgICAvLyA0OSwwMDEtNTAsMDAwCiAgWyA1MTAwMCwgMTEwMzc5XSwgICAvLyA1MCwwMDEtNTEsMDAwCiAgWyA1MjAwMCwgMTEyNTQzXSwgICAvLyA1MSwwMDEtNTIsMDAwCiAgWyA1MzAwMCwgMTE0NzA3XSwgICAvLyA1MiwwMDEtNTMsMDAwCiAgWyA1NDAwMCwgMTE2ODcyXSwgICAvLyA1MywwMDEtNTQsMDAwCiAgWyA1NTAwMCwgMTE5MDM2XSwgICAvLyA1NCwwMDEtNTUsMDAwCiAgWyA1NjAwMCwgMTIxMjAwXSwgICAvLyA1NSwwMDEtNTYsMDAwCiAgWyA1NzAwMCwgMTIzMzY0XSwgICAvLyA1NiwwMDEtNTcsMDAwCiAgWyA1ODAwMCwgMTI1NTI5XSwgICAvLyA1NywwMDEtNTgsMDAwCiAgWyA1OTAwMCwgMTI3NjkzXSwgICAvLyA1OCwwMDEtNTksMDAwCiAgWyA2MDAwMCwgMTI5ODU3XSwgICAvLyA1OSwwMDEtNjAsMDAwCiAgWyA2MTAwMCwgMTMyMDIxXSwgICAvLyA2MCwwMDEtNjEsMDAwCiAgWyA2MjAwMCwgMTM0MTg2XSwgICAvLyA2MSwwMDEtNjIsMDAwCiAgWyA2MzAwMCwgMTM2MzUwXSwgICAvLyA2MiwwMDEtNjMsMDAwCiAgWyA2NDAwMCwgMTM4NTE0XSwgICAvLyA2MywwMDEtNjQsMDAwCiAgWyA2NTAwMCwgMTQwNjc5XSwgICAvLyA2NCwwMDEtNjUsMDAwCiAgWyA2NjAwMCwgMTQyODQzXSwgICAvLyA2NSwwMDEtNjYsMDAwCiAgWyA2NzAwMCwgMTQ1MDA3XSwgICAvLyA2NiwwMDEtNjcsMDAwCiAgWyA2ODAwMCwgMTQ3MTcyXSwgICAvLyA2NywwMDEtNjgsMDAwCiAgWyA2OTAwMCwgMTQ5MzM2XSwgICAvLyA2OCwwMDEtNjksMDAwCiAgWyA3MDAwMCwgMTUxNTAwXSwgICAvLyA2OSwwMDEtNzAsMDAwCiAgWyA3MTAwMCwgMTUzNjY0XSwgICAvLyA3MCwwMDEtNzEsMDAwCiAgWyA3MjAwMCwgMTU1ODI5XSwgICAvLyA3MSwwMDEtNzIsMDAwCiAgWyA3MzAwMCwgMTU3OTkzXSwgICAvLyA3MiwwMDEtNzMsMDAwCiAgWyA3NDAwMCwgMTYwMTU3XSwgICAvLyA3MywwMDEtNzQsMDAwCiAgWyA3NTAwMCwgMTYyMzIyXSwgICAvLyA3NCwwMDEtNzUsMDAwCiAgWyA3NjAwMCwgMTY0NDg2XSwgICAvLyA3NSwwMDEtNzYsMDAwCiAgWyA3NzAwMCwgMTY2NjUwXSwgICAvLyA3NiwwMDEtNzcsMDAwCiAgWyA3ODAwMCwgMTY4ODE0XSwgICAvLyA3NywwMDEtNzgsMDAwCiAgWyA3OTAwMCwgMTcwOTc5XSwgICAvLyA3OCwwMDEtNzksMDAwCiAgWyA4MDAwMCwgMTczMTQzXSwgICAvLyA3OSwwMDEtODAsMDAwCiAgWyA4MTAwMCwgMTc1MzA3XSwgICAvLyA4MCwwMDEtODEsMDAwCiAgWyA4MjAwMCwgMTc3NDcyXSwgICAvLyA4MSwwMDEtODIsMDAwCiAgWyA4MzAwMCwgMTc5NjM2XSwgICAvLyA4MiwwMDEtODMsMDAwCiAgWyA4NDAwMCwgMTgxODAwXSwgICAvLyA4MywwMDEtODQsMDAwCiAgWyA4NTAwMCwgMTgzOTY0XSwgICAvLyA4NCwwMDEtODUsMDAwCiAgWyA4NjAwMCwgMTg2MTI5XSwgICAvLyA4NSwwMDEtODYsMDAwCiAgWyA4NzAwMCwgMTg4MjkzXSwgICAvLyA4NiwwMDEtODcsMDAwCiAgWyA4ODAwMCwgMTkwNDU3XSwgICAvLyA4NywwMDEtODgsMDAwCiAgWyA4OTAwMCwgMTkyNjIyXSwgICAvLyA4OCwwMDEtODksMDAwCiAgWyA5MDAwMCwgMTk0Nzg2XSwgICAvLyA4OSwwMDEtOTAsMDAwCiAgWyA5MTAwMCwgMTk2OTUwXSwgICAvLyA5MCwwMDEtOTEsMDAwCiAgWyA5MjAwMCwgMTk5MTE0XSwgICAvLyA5MSwwMDEtOTIsMDAwCiAgWyA5MzAwMCwgMjAxMjc5XSwgICAvLyA5MiwwMDEtOTMsMDAwCiAgWyA5NDAwMCwgMjAzNDQzXSwgICAvLyA5MywwMDEtOTQsMDAwCiAgWyA5NTAwMCwgMjA1NjA3XSwgICAvLyA5NCwwMDEtOTUsMDAwCiAgWyA5NjAwMCwgMjA3NzcyXSwgICAvLyA5NSwwMDEtOTYsMDAwCiAgWyA5NzAwMCwgMjA5OTM2XSwgICAvLyA5NiwwMDEtOTcsMDAwCiAgWyA5ODAwMCwgMjEyMTAwXSwgICAvLyA5NywwMDEtOTgsMDAwCiAgWyA5OTAwMCwgMjE0MjY0XSwgICAvLyA5OCwwMDEtOTksMDAwCiAgWzEwMDAwMCwgMjE2NDI5XSwgICAvLyA5OSwwMDEtMTAwLDAwMApdOwpmdW5jdGlvbiBwbGF0Zm9ybUNvc3RGb3IodG90YWxCYW5rSGVhZGNvdW50KSB7CiAgY29uc3QgaCA9IE51bWJlcih0b3RhbEJhbmtIZWFkY291bnQpIHx8IDA7CiAgZm9yIChjb25zdCBbY2VpbCwgZmVlXSBvZiBMSUNFTkNFX0JBTkRTKSBpZiAoaCA8PSBjZWlsKSByZXR1cm4gZmVlOwogIHJldHVybiBMSUNFTkNFX0JBTkRTW0xJQ0VOQ0VfQkFORFMubGVuZ3RoIC0gMV1bMV07Cn0KLyogUk9JIGRlbm9taW5hdG9yIGZhbGxiYWNrLCB1c2VkIG9ubHkgd2hlbiBhIGxpY2VuY2UgZmVlIGlzIG5vdCBzdXBwbGllZCAodGhlIGRldGFpbGVkCiAgIGJ1aWxkJ3MgZGVmYXVsdCwgYW5kIGNhbGMoKSdzIGRlZmF1bHQgcGFyYW1ldGVyKS4gVGhpcyBjYWxjdWxhdG9yIG5ldmVyIHJlYWNoZXMgaXQ6CiAgIGl0IGFsd2F5cyBwYXNzZXMgcGxhdGZvcm1Db3N0Rm9yKGJhbmtQb29sKS4gVGhlIG9sZCDCozE3LDAwMCBzdGFuZC1pbiwgcmVzY2FsZWQgYnkgdGhlCiAgIHNhbWUgfjE0LjUlIHRoZSBwdWJsaXNoZWQgYmFuZHMgbW92ZWQsIHNvIHRoZSBkZXRhaWxlZCBtb2RlbCdzIGRlZmF1bHQgZGVub21pbmF0b3IKICAgdHJhY2tzIHRoZSBuZXcgcHJpY2UgbGlzdCBpbnN0ZWFkIG9mIHF1aWV0bHkgc3RheWluZyBvbiB0aGUgb2xkIG9uZS4gKi8KY29uc3QgUExBVEZPUk1fQ09TVCA9IDE0NTMwOwpjb25zdCBBRE1JTl9IUlNfUEVSX0RBWSA9IDEuMDsgICAgICAgLy8gY29uc2VydmF0aXZlIChjbGllbnQgc3VnZ2VzdGVkIDIuNSA9IG9wdGltaXN0aWMpCmNvbnN0IEFETUlOX1dPUktJTkdfREFZUyA9IDIyNTsKY29uc3QgQURNSU5fTE9BREVEX0hPVVJMWSA9IDE4Owpjb25zdCBTSU1QTEVfQkxFTkRFRF9CQU5LX1BBWSA9IDM0MDAwOyAgICAvLyBBZkMgYmFuZC1taXggd2VpZ2h0ZWQgbWlkcG9pbnQgKDIwMjYvMjcsICszLjMlKQovKiBRdWljay1tb2RlIGFnZW5jeS1zcGVuZCBlc3RpbWF0ZSwgcGVyIFJFR0lTVEVSRUQgYmFuayB3b3JrZXIgKEZZMjAyNS8yNiBiYXNpcykuCiAgIFJFR0lTVEVSRUQgPSBldmVyeW9uZSBvbiB0aGUgdHJ1c3QncyBiYW5rIHJlZ2lzdGVyLCBJTkNMVURJTkcgc3Vic3RhbnRpdmUgc3RhZmYgd2hvCiAgIGFsc28gcGljayB1cCBiYW5rIHNoaWZ0cyAofjIvMyBvZiByZWdpc3RyYW50cykg4oCUIE5PVCBiYW5rLW9ubHkgaGVhZGNvdW50IChwZXIgYmFuay1vbmx5CiAgIHRoZSBmaWd1cmUgd291bGQgYmUgfsKjOGspLiBUaGUgVUkgbGFiZWwgbXVzdCBzYXkgc28sIG9yIHRoZSBkZW5vbWluYXRvciBpcyB3cm9uZy4KICAgRGVyaXZhdGlvbjogwqMxLjJibiBuYXRpb25hbCBOSFMgYWdlbmN5IHNwZW5kIChOSFMgRW5nbGFuZCBNMTIgMjAyNS8yNiwgdW5hdWRpdGVkKQogICDDtyB+NDAw4oCTNTAwayByZWdpc3RlcmVkIGJhbmsgd29ya2VycyDiiYggwqMyLDQwMOKAk8KjMywwMDAg4oaSIG1pZHBvaW50IMKjMiw3MDAuCiAgIOKaoCBSRVZJRVcgQU5OVUFMTFkg4oCUIHRoaXMgZGVjYXlzIGZhc3Q6IG5hdGlvbmFsIHBvbGljeSBtYW5kYXRlcyDiiJIzMCUgYWdlbmN5IGluIDIwMjYvMjcsCiAgIOKIkjI1JSBpbiAyMDI3LzI4LCBhbmQgemVybyBhZ2VuY3kgc3BlbmQgYnkgMjAyOS8zMC4gSXQgaXMgb25seSB0aGUgZmFsbGJhY2sgdXNlZCB3aGVuIGEKICAgdXNlciBnaXZlcyBiYW5rIHNpemUgYWxvbmU7IGEgdXNlci1lbnRlcmVkIGFjdHVhbCBhZ2VuY3kgc3BlbmQgYWx3YXlzIHRha2VzIHByZWNlZGVuY2UuICovCmNvbnN0IEFHRU5DWV9TUEVORF9QRVJfUkVHSVNURVJFRF9CQU5LX1dPUktFUl9HQlAgPSAyNzAwOyAgIC8vIEZZMjAyNS0yNiBiYXNpcywgcmV2aWV3IGFubnVhbGx5CmNvbnN0IERFRkFVTFRTID0geyBiYW5rUG9vbDogNjYwLCBhZ2VuY3lGaWxsUmF0ZTogOC4zLCBudW1NYW5hZ2VyczogMTIsIHByZW1pdW06IDIwLCBkaXNwbGFjZW1lbnQ6IDEzIH07ICAvLyBhZ2VuY3lGaWxsUmF0ZSA4LjMlID0gYWdyZWVkIG5hdGlvbmFsIGF2ZXJhZ2UgKFJMRGF0aXggaW50ZXJuYWwgZGF0YSkKLyogW0JlbmNobWFyayDCpzRdIERpc3BsYWNlYWJsZSBzaGFyZSBvZiBhZ2VuY3kgdGhhdCBjYW4gcmVhbGlzdGljYWxseSBtb3ZlIHRvIGJhbmsgKGV4Y2x1ZGVzIGJyZWFrLWdsYXNzIC8KICAgc2FmZXR5LWNyaXRpY2FsIGNvdmVyIGFuZCBoYXJkLXRvLWZpbGwgc3BlY2lhbGlzdCByb2xlcyk7IGRpc3BsYWNlbWVudCBhcHBsaWVzIHRvIHRoaXMgc2hhcmUgb25seS4gKi8KY29uc3QgRElTUExBQ0VBQkxFX1NIQVJFX0RFRkFVTFQgPSAwLjgwOwoKLyogU3RhbmNlIG5vdGVzIHN0YXRlIHRoZSBFRkZFQ1RJVkUgd2hvbGUtYm9vayByYXRlIChzdGFuY2UgJSDDlyA4MCUgZGlzcGxhY2VhYmxlIHNoYXJlKSwKICAgbm90IGp1c3QgdGhlIG5vbWluYWwgJSwgc28gdGhlIGxhYmVsIG1hdGNoZXMgd2hhdCB0aGUgZW5naW5lIGFjdHVhbGx5IGFwcGxpZXMgKGF1ZGl0IE0yKS4KICAgJ01vZGVyYXRlJyBpcyB0aGUgY3VzdG9tZXItZmFjaW5nIG5hbWUgKHdhcyBpbnRlcm5hbGx5ICdFeHBlY3RlZCcpLiAqLwpmdW5jdGlvbiBzdGFuY2UoZCkgewogIGNvbnN0IGVmZiA9IE1hdGgucm91bmQoZCAqIERJU1BMQUNFQUJMRV9TSEFSRV9ERUZBVUxUKTsgICAvLyBlZmZlY3RpdmUgc2hhcmUgb2YgQUxMIGFnZW5jeQogIGlmIChkIDw9IDE4KSByZXR1cm4geyBrZXk6ICJDb25zZXJ2YXRpdmUiLCBub3RlOiBgQXNzdW1lcyAke2R9JSBvZiB0aGUgZGlzcGxhY2VhYmxlIGFnZW5jeSBzaGFyZSBtb3ZlcyB0byB5b3VyIG93biBiYW5rLCBhYm91dCAke2VmZn0lIG9mIGFsbCBhZ2VuY3ksIHdlbGwgYmVsb3cgdGhlIDI2JSByZWxhdGl2ZSBmYWxsIHNlZW4gaW4gYSBwaWxvdCBzdHVkeS5gIH07CiAgaWYgKGQgPD0gMzApIHJldHVybiB7IGtleTogIk1vZGVyYXRlIiwgbm90ZTogYEFzc3VtZXMgJHtkfSUgb2YgdGhlIGRpc3BsYWNlYWJsZSBhZ2VuY3kgc2hhcmUgbW92ZXMgdG8geW91ciBvd24gYmFuaywgYWJvdXQgJHtlZmZ9JSBvZiBhbGwgYWdlbmN5LCBuZWFyIHRoZSAyNiUgcmVsYXRpdmUgZmFsbCByZWFjaGVkIGF0IGEgY29tbXVuaXR5IHRydXN0IChhZ2VuY3kgZmlsbCA4LjEl4oaSNi4wJSkuYCB9OwogIHJldHVybiB7IGtleTogIk9wdGltaXN0aWMiLCBub3RlOiBgQXNzdW1lcyAke2R9JSBvZiB0aGUgZGlzcGxhY2VhYmxlIGFnZW5jeSBzaGFyZSBtb3ZlcyB0byB5b3VyIG93biBiYW5rIChhYm91dCAke2VmZn0lIG9mIGFsbCBhZ2VuY3kpLiBUaGlzIGlzIGF0IG9yIGJleW9uZCB0aGUgcmVzdWx0IHNlZW4gaW4gdGhlIHBpbG90IHN0dWR5LCBzbyBpdCBpcyBiZXN0IGJhY2tlZCBieSB5b3VyIG93biBvcmdhbmlzYXRpb24ncyBmaWd1cmVzLmAgfTsKfQoKZnVuY3Rpb24gY2FsYyhpbnApIHsKICBjb25zdCB7IGJhbmtQb29sID0gMCwgYWdlbmN5RmlsbFJhdGUgPSAwLCBudW1NYW5hZ2VycyA9IDAsCiAgICAgICAgICBwcmVtaXVtID0gMjAsIGRpc3BsYWNlbWVudCA9IDEzLCBzaGlmdEhvdXJzID0gU0hJRlRfSE9VUlMsCiAgICAgICAgICBvbmNvc3QgPSBCQU5LX09OQ09TVCAqIDEwMCwgcGxhdGZvcm1Db3N0ID0gUExBVEZPUk1fQ09TVCwgaW5jbHVkZUFkbWluID0gZmFsc2UsIGRpc3BsYWNlYWJsZVNoYXJlID0gRElTUExBQ0VBQkxFX1NIQVJFX0RFRkFVTFQgfSA9IGlucDsKICBjb25zdCBwID0gcHJlbWl1bSAvIDEwMCwgZCA9IGRpc3BsYWNlbWVudCAvIDEwMCwgb2MgPSBvbmNvc3QgLyAxMDA7CiAgY29uc3QgYmFua1NoaWZ0Q29zdCA9IChTSU1QTEVfQkxFTkRFRF9CQU5LX1BBWSAvIEFGQ19ESVZJU09SKSAqIHNoaWZ0SG91cnMgKiAoMSArIG9jKTsKICBjb25zdCBhZ2VuY3lTaGlmdENvc3QgPSBiYW5rU2hpZnRDb3N0ICogKDEgKyBwKTsKICAvLyBBbmNob3Igb24gYWdlbmN5IHNwZW5kOiB0aGUgdXNlcidzIGFjdHVhbCBmaWd1cmUgd2hlbiBnaXZlbiwgZWxzZSBhdXRvLWVzdGltYXRlZCBhdAogIC8vIH7CozIsNzAwIHBlciByZWdpc3RlcmVkIGJhbmsgd29ya2VyIChGWTIwMjUvMjYpLiBUaGUgZmlsbCByYXRlIGZlZWRzIHRoZSByZWxpYW5jZQogIC8vIG5hcnJhdGl2ZSAoZmlsbEFmdGVyKSBvbmx5LCBub3QgdGhlIGNhc2guCiAgY29uc3QgYWdlbmN5U3BlbmQgPSBpbnAuYWdlbmN5U3BlbmQgIT0gbnVsbCA\/IE1hdGgubWF4KDAsIE51bWJlcihpbnAuYWdlbmN5U3BlbmQpIHx8IDApIDogTWF0aC5yb3VuZChiYW5rUG9vbCAqIEFHRU5DWV9TUEVORF9QRVJfUkVHSVNURVJFRF9CQU5LX1dPUktFUl9HQlAgLyAxMDAwKSAqIDEwMDA7ICAgLy8gY2xlYW4gdGhvdXNhbmRzIC0gaXQncyBhbiBlc3RpbWF0ZSwgYW5kIGl0IGtlZXBzIHRoaXMgcHJvZHVjdCdzIHF1b3RlIGlkZW50aWNhbCB0byB0aGUgY29tbWVyY2lhbCBjYWxjdWxhdG9yJ3MKICBjb25zdCBiYXNlbGluZSA9IGFnZW5jeVNoaWZ0Q29zdCA+IDAgPyBhZ2VuY3lTcGVuZCAvIGFnZW5jeVNoaWZ0Q29zdCA6IDA7CiAgY29uc3QgZGlzcGxhY2VkID0gYmFzZWxpbmUgKiBkaXNwbGFjZWFibGVTaGFyZSAqIGQ7ICAgICAgICAgICAvLyBkdXR5IGNvdW50cyAobmVlZCBhIHBheSByYXRlKQogIGNvbnN0IGFnZW5jeVNhdmluZyA9IGFnZW5jeVNwZW5kICogZGlzcGxhY2VhYmxlU2hhcmUgKiBkICogKHAgLyAoMSArIHApKTsgICAvLyBDQVNIOiBwYXktaW5kZXBlbmRlbnQgaWRlbnRpdHkKICBjb25zdCB0aW1lU2F2ZWRXZWVrID0gbnVtTWFuYWdlcnMgKiBBRE1JTl9IUlNfUEVSX0RBWSAqIDU7ICAgICAvLyBjby1oZWFkbGluZSAoaG91cnMvd2VlayksIGFsd2F5cyBzaG93bgogIGNvbnN0IGFkbWluU2F2aW5nID0gaW5jbHVkZUFkbWluID8gbnVtTWFuYWdlcnMgKiBBRE1JTl9IUlNfUEVSX0RBWSAqIEFETUlOX1dPUktJTkdfREFZUyAqIEFETUlOX0xPQURFRF9IT1VSTFkgOiAwOwogIGNvbnN0IGdyb3NzQmVuZWZpdCA9IGFnZW5jeVNhdmluZyArIGFkbWluU2F2aW5nOwogIGNvbnN0IG5ldFNhdmluZyA9IGdyb3NzQmVuZWZpdCAtIHBsYXRmb3JtQ29zdDsKICBjb25zdCByb2lQY3QgPSBwbGF0Zm9ybUNvc3QgPiAwID8gKG5ldFNhdmluZyAvIHBsYXRmb3JtQ29zdCkgKiAxMDAgOiBudWxsOyAgIC8vIG4vYSAobm90IDAlKSB3aGVuIG5vIHBsYXRmb3JtIGNvc3QKICBjb25zdCByb2lNdWx0aXBsZSA9IHBsYXRmb3JtQ29zdCA+IDAgPyBuZXRTYXZpbmcgLyBwbGF0Zm9ybUNvc3QgOiBudWxsOyAgIC8vIG5ldCByZXR1cm4gb24gdGhlIGxpY2VuY2UgZmVlIChuZXQgc2F2aW5nIMO3IGNvc3QpCiAgY29uc3QgcGF5YmFja01vbnRocyA9IGdyb3NzQmVuZWZpdCA+IDAgPyBwbGF0Zm9ybUNvc3QgLyAoZ3Jvc3NCZW5lZml0IC8gMTIpIDogbnVsbDsKICBjb25zdCBjYXBhY2l0eVZhbHVlID0gZGlzcGxhY2VkICogYmFua1NoaWZ0Q29zdDsgICAgICAgICAgICAgIC8vIGdyb3NzIGJhbmsgYmFja2ZpbGwgY29zdCAoTk9OLWNhc2gpCiAgY29uc3QgZmlsbEFmdGVyID0gYWdlbmN5RmlsbFJhdGUgKiAoMSAtIGRpc3BsYWNlYWJsZVNoYXJlICogZCk7ICAgLy8gcmVkdWN0aW9uIG9uIHRoZSBkaXNwbGFjZWFibGUgc2hhcmUgb25seSwgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbGxlZCBjb3VudHMKICBjb25zdCBleGNlZWRzU3BlbmQgPSBhZ2VuY3lTYXZpbmcgPiBhZ2VuY3lTcGVuZCAmJiBhZ2VuY3lTcGVuZCA+IDA7CiAgY29uc3QgYWRtaW5Pbmx5ID0gYWdlbmN5U2F2aW5nIDw9IDAgJiYgYWRtaW5TYXZpbmcgPiAwOyAgICAgICAvLyByZWFjaGFibGUgY2hlY2s6IHNhdmluZyBpcyBhZG1pbiB0aW1lIG9ubHkKICAvKiA+MTAweC4gVGhlIGxpY2VuY2UgZmVlIHBlciB3b3JrZXIgZmFsbHMgd2l0aCB2b2x1bWUgKGZyb20gfsKjMTMuNTEgYXQgNjAwIHdvcmtlcnMKICAgICB0byBhIGZsYXQgwqMyLjE2IGFib3ZlIH4yMCwwMDApLCBzbyB0aGUgcmV0dXJuIG11bHRpcGxlIGNsaW1icyB3aXRoIGJhbmsgc2l6ZSBhbmQKICAgICBwbGF0ZWF1czogMjEuN3ggb24gQ29uc2VydmF0aXZlLCA0My40eCBvbiBNb2RlcmF0ZSwgODMuM3ggb24gT3B0aW1pc3RpYywgYWxsIHBlYWtpbmcKICAgICBhcm91bmQgMjAsMDAwIHdvcmtlcnMuIFRoZSBvbGQgPjQweCBsaW5lIHByZWRhdGVkIHRoZSBzbGlkZXIgcmVhY2hpbmcgMTAwLDAwMCBhbmQKICAgICB3b3VsZCBoYXZlIGZpcmVkIGZvciBtb3N0IGxhcmdlIG9yZ2FuaXNhdGlvbnMgb24gdGhlIGRlZmF1bHQgY29uZmlkZW5jZSwgd2hpY2ggbWFrZXMKICAgICBpdCB3YWxscGFwZXIgcmF0aGVyIHRoYW4gYSBzZW5zZS1jaGVjay4gMTAweCBjbGVhcnMgdGhlIDgzLjN4IHBlYWsgd2l0aCByb29tIHRvCiAgICAgc3BhcmUsIG1hdGNoZXMgdGhlIGNvbW1lcmNpYWwgYnVpbGQsIGFuZCBzdGlsbCBjYXRjaGVzIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBmb3I6CiAgICAgYSB0eXBvJ2QgYWdlbmN5IHNwZW5kIG9yIGxpY2VuY2UgZmVlICjCozUwMG0gc3BlbmQgb24gYSAyLDAwMCBiYW5rIGdpdmVzIH4xLDM5MngpLiAqLwogIGNvbnN0IGltcGxhdXNpYmxlUm9pID0gcm9pUGN0ICE9IG51bGwgJiYgcm9pUGN0ID4gMTAwMDA7CiAgcmV0dXJuIHsgYWdlbmN5U3BlbmQsIGFnZW5jeVNhdmluZywgYWRtaW5TYXZpbmcsIHRpbWVTYXZlZFdlZWssIGdyb3NzQmVuZWZpdCwgbmV0U2F2aW5nLCByb2lQY3QsIHJvaU11bHRpcGxlLAogICAgICAgICAgIHBheWJhY2tNb250aHMsIGRpc3BsYWNlZCwgY2FwYWNpdHlWYWx1ZSwgZmlsbE5vdzogYWdlbmN5RmlsbFJhdGUsIGZpbGxBZnRlciwKICAgICAgICAgICBleGNlZWRzU3BlbmQsIGFkbWluT25seSwgaW1wbGF1c2libGVSb2ksIHByZW1pdW0sIGRpc3BsYWNlbWVudCwgcGxhdGZvcm1Db3N0LAogICAgICAgICAgIGJhbmtTaGlmdENvc3QsIGFnZW5jeVNoaWZ0Q29zdCwgc2hpZnRIb3VycyB9Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIERFVEFJTEVEIC8gQ09NTUVSQ0lBTCBNT0RFTC4gUGVyIHN0YWZmIGdyb3VwLCBwb3J0ZWQgZnJvbSB0aGUgd2ViIGNhbGN1bGF0b3IuCiAgIFNhbWUgdmFsdWUgbG9naWMgYXMgdGhlIHNpbXBsZSB2YXJpYW50IChjYXNoID0gYWdlbmN5IHByZW1pdW0gZGlzcGxhY2VkKSwgYnV0CiAgIGFuY2hvcmVkIHRvIGVhY2ggZ3JvdXAncyBvd24gYWdlbmN5IHNwZW5kIGFuZCBiYW5rIHBheS4gUHJlbWl1bSBpcyBhIHNpbmdsZQogICBvZmZpY2lhbCBtZWNoYW5pYyAoMjAlKSBieSBkZWZhdWx0OyBhbiBvcHRpb25hbCBwZXItZ3JvdXAgb3ZlcnJpZGUgaXMgc3VwcG9ydGVkLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBudW0gPSAodiwgZCA9IDApID0+IHsgY29uc3QgbiA9IE51bWJlcih2KTsgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA\/IG4gOiBkOyB9OwovKiBbQmVuY2htYXJrIMKnMV0gQWdlbmN5IHNwZW5kIGFzIGEgc2hhcmUgb2YgdHVybm92ZXIsIGJ5IHR5cGUg4oCUIGVzdGltYXRlIHNwZW5kIHdoZW4gb25seSB0dXJub3ZlciBpcyBrbm93bi4gKi8KY29uc3QgQUdFTkNZX1BDVF9PRl9UVVJOT1ZFUiA9IHsgYWN1dGU6IDAuMDM1LCAiYWN1dGUtbGFyZ2UiOiAwLjAxLCBtZW50YWw6IDAuMDQyLCBjb21tdW5pdHk6IDAuMDMsIGFtYnVsYW5jZTogMC4wMTgsIGljczogMC4wMyB9OwpmdW5jdGlvbiBhZ2VuY3lTcGVuZEZyb21UdXJub3Zlcih0dXJub3ZlciwgdHlwZSkgeyByZXR1cm4gbnVtKHR1cm5vdmVyKSAqIChBR0VOQ1lfUENUX09GX1RVUk5PVkVSW3R5cGVdICE9IG51bGwgPyBBR0VOQ1lfUENUX09GX1RVUk5PVkVSW3R5cGVdIDogMC4wMyk7IH0KLyogW0JlbmNobWFyayDCpzVdIEFnZW5jeS1pbnRlbnNpdHkgcmVnaW1lIGZyb20gYWdlbmN5ICUgb2YgdHVybm92ZXI6IDwxJSBtYXR1cmUvbG93LCAxLTQlIHR5cGljYWwsID40JSBoaWdoLiAqLwpmdW5jdGlvbiBhZ2VuY3lSZWdpbWUodG90U3BlbmQsIHR1cm5vdmVyKSB7IGNvbnN0IHQgPSBudW0odHVybm92ZXIpOyBpZiAoISh0ID4gMCkpIHJldHVybiB7IHBjdDogbnVsbCwga2V5OiBudWxsIH07IGNvbnN0IHBjdCA9ICh0b3RTcGVuZCAvIHQpICogMTAwOyByZXR1cm4geyBwY3QsIGtleTogcGN0IDwgMSA\/ICJsb3ciIDogKHBjdCA8PSA0ID8gInR5cGljYWwiIDogImhpZ2giKSB9OyB9CgovKiBQZXItdHlwZSBvcmdhbmlzYXRpb24gdGVtcGxhdGVzLiBFYWNoIGNhcnJpZXMgYSByZWFsaXN0aWMgc3RhZmYtZ3JvdXAgcHJvZmlsZQogICAocm9sZSwgYmFuZCwgYmFuayBwYXksIGhlYWRjb3VudCwgYWdlbmN5IHNwZW5kKSB0aGF0IHN1bXMgdG8gdGhhdCB0eXBlJ3MKICAgdG90YWxzLiBQYXkgPSAyMDI2LzI3IEFmQyBtaWRwb2ludHMuIEV2ZXJ5IHZhbHVlIGlzIGEgc3RhcnRpbmcgcG9pbnQgYW5kIGlzCiAgIGZ1bGx5IGVkaXRhYmxlOyB0aGUgdHdvIHNpemUgaGVhZGxpbmVzICh0b3RhbCBoZWFkY291bnQgKyB0b3RhbCBhZ2VuY3kgc3BlbmQpCiAgIHJlc2NhbGUgdGhlIG1peCBwcm9wb3J0aW9uYWxseSB2aWEgc2NhbGVHcm91cHNUbygpLiAqLwpjb25zdCBHID0gKGlkLCByb2xlLCBiYW5kLCBiYW5rUGF5LCBoZWFkY291bnQsIGFnZW5jeVNwZW5kKSA9PiAoeyBpZCwgcm9sZSwgYmFuZCwgYmFua1BheSwgaGVhZGNvdW50LCBhZ2VuY3lTcGVuZCB9KTsKCmNvbnN0IE9SR19UWVBFUyA9IHsKICBhY3V0ZTogeyBsYWJlbDogIkFjdXRlIHRydXN0IChkaXN0cmljdCBnZW5lcmFsKSIsIGRlc2M6ICJ+MiwyMDAgYmFuayDCtyB+wqMxNW0gYWdlbmN5IiwgaWNvbktleTogImhvc3BpdGFsIiwgdHVybm92ZXI6IDQzMDAwMDAwMCwgZ3JvdXBzOiBbCiAgICBHKCJybiIsICAiUmVnaXN0ZXJlZCBudXJzZXMiLCAgICAgICJCYW5kIDUiLCAgICAgMzU1NTgsIDkwMCwgNjUwMDAwMCksCiAgICBHKCJzbiIsICAiU2VuaW9yIG51cnNlcyIsICAgICAgICAgICJCYW5kIDYiLCAgICAgNDQwMzgsIDM1MCwgMjUwMDAwMCksCiAgICBHKCJhaHAiLCAiQUhQcyAocGh5c2lvIC8gT1QpIiwgICAgICJCYW5kIDUvNiIsICAgMzk3OTgsIDMwMCwgMTUwMDAwMCksCiAgICBHKCJoY2EiLCAiSGVhbHRoY2FyZSBhc3Npc3RhbnRzIiwgICJCYW5kIDIvMyIsICAgMjU5NDUsIDU1MCwgNTAwMDAwKSwKICAgIEcoImRvYyIsICJNZWRpY3MgKGxvY3VtIC8gU0FTKSIsICAgIlNBUyAvIFNUMysiLCA2MDAwMCwgMTAwLCA0MDAwMDAwKSwKICBdfSwKICBjb21tdW5pdHk6IHsgbGFiZWw6ICJDb21tdW5pdHkgLyBzcGVjaWFsaXN0IiwgZGVzYzogIn43MDAgYmFuayDCtyB+wqM3bSBhZ2VuY3kiLCBpY29uS2V5OiAiY29tbXVuaXR5IiwgdHVybm92ZXI6IDIzNTAwMDAwMCwgZ3JvdXBzOiBbCiAgICBHKCJjbiIsICAiQ29tbXVuaXR5IC8gZGlzdHJpY3QgbnVyc2VzIiwgIkJhbmQgNiIsICAgICA0NDAzOCwgMjAwLCAyNTAwMDAwKSwKICAgIEcoInJuIiwgICJSZWdpc3RlcmVkIG51cnNlcyIsICAgICAgICAgICAiQmFuZCA1IiwgICAgIDM1NTU4LCAxODAsIDE4MDAwMDApLAogICAgRygiYWhwIiwgIkFIUHMgKHBoeXNpbyAvIE9UIC8gU0xUKSIsICAgICJCYW5kIDUvNiIsICAgMzk3OTgsIDIwMCwgMjAwMDAwMCksCiAgICBHKCJoY2EiLCAiSGVhbHRoY2FyZSBhc3Npc3RhbnRzIiwgICAgICAgIkJhbmQgMi8zIiwgICAyNTk0NSwgMTAwLCA0MDAwMDApLAogICAgRygiZG9jIiwgIk1lZGljcyAobG9jdW0gLyBTQVMpIiwgICAgICAgICJTQVMgLyBTVDMrIiwgNjAwMDAsIDIwLCAgMzAwMDAwKSwKICBdfSwKICBtZW50YWw6IHsgbGFiZWw6ICJNZW50YWwgaGVhbHRoIHRydXN0IiwgZGVzYzogIn4xLDAwMCBiYW5rIMK3IH7CozEwbSBhZ2VuY3kiLCBpY29uS2V5OiAiYmVoYXZpb3JhbCIsIHR1cm5vdmVyOiAyMzUwMDAwMDAsIGdyb3VwczogWwogICAgRygicm1uIiwgIk1lbnRhbCBoZWFsdGggbnVyc2VzIChSTU4pIiwgIkJhbmQgNSIsICAgICAzNTU1OCwgNDUwLCA0NTAwMDAwKSwKICAgIEcoInNuIiwgICJTZW5pb3IgbnVyc2VzIiwgICAgICAgICAgICAgICJCYW5kIDYiLCAgICAgNDQwMzgsIDE1MCwgMjAwMDAwMCksCiAgICBHKCJoY2EiLCAiSGVhbHRoY2FyZSBhc3Npc3RhbnRzIiwgICAgICAiQmFuZCAyLzMiLCAgIDI1OTQ1LCAzMDAsIDE1MDAwMDApLAogICAgRygiYWhwIiwgIkFIUHMgKE9UIC8gcHN5Y2hvbG9neSkiLCAgICAgIkJhbmQgNS82IiwgICAzOTc5OCwgNTAsICA1MDAwMDApLAogICAgRygiZG9jIiwgIk1lZGljcyAobG9jdW0gcHN5Y2gpIiwgICAgICAgIlNBUyAvIFNUMysiLCA2MDAwMCwgNTAsICAxNTAwMDAwKSwKICBdfSwKICBhbWJ1bGFuY2U6IHsgbGFiZWw6ICJBbWJ1bGFuY2UgdHJ1c3QiLCBkZXNjOiAifjQwMCBiYW5rIMK3IH7CozRtIGFnZW5jeSIsIGljb25LZXk6ICJwaHlzaWNpYW4iLCB0dXJub3ZlcjogMjIwMDAwMDAwLCBncm91cHM6IFsKICAgIEcoInBhcmEiLCAiUGFyYW1lZGljcyIsICAgICAgICAgICAgICAgIkJhbmQgNiIsICAgICA0NDAzOCwgMTgwLCAyMjAwMDAwKSwKICAgIEcoImVtdCIsICAiRU1UcyAvIGNhcmUgYXNzaXN0YW50cyIsICAgIkJhbmQgMyIsICAgICAyNjYxOCwgMTAwLCA3MDAwMDApLAogICAgRygicm4iLCAgICJOdXJzZXMgKDExMSAvIFVDQykiLCAgICAgICAiQmFuZCA1IiwgICAgIDM1NTU4LCA2MCwgIDYwMDAwMCksCiAgICBHKCJjYWxsIiwgIkNhbGwgaGFuZGxlcnMgLyBkaXNwYXRjaCIsICJCYW5kIDMiLCAgICAgMjY2MTgsIDUwLCAgMzAwMDAwKSwKICAgIEcoImRvYyIsICAiTWVkaWNzIChsb2N1bSkiLCAgICAgICAgICAgIlNBUyAvIFNUMysiLCA2MDAwMCwgMTAsICAyMDAwMDApLAogIF19LAogIGljczogeyBsYWJlbDogIklDUyAvIGNvbGxhYm9yYXRpdmUiLCBkZXNjOiAifjUsMDAwIGJhbmsgwrcgfsKjMzBtIGFnZW5jeSIsIGljb25LZXk6ICJuZXR3b3JrIiwgdHVybm92ZXI6IDEwMDAwMDAwMDAsIGdyb3VwczogWwogICAgRygicm4iLCAgIlJlZ2lzdGVyZWQgbnVyc2VzIiwgICAgICJCYW5kIDUiLCAgICAgMzU1NTgsIDE5MDAsIDEyMDAwMDAwKSwKICAgIEcoInNuIiwgICJTZW5pb3IgbnVyc2VzIiwgICAgICAgICAiQmFuZCA2IiwgICAgIDQ0MDM4LCA5MDAsICA1MDAwMDAwKSwKICAgIEcoImFocCIsICJBSFBzIiwgICAgICAgICAgICAgICAgICAiQmFuZCA1LzYiLCAgIDM5Nzk4LCA4MDAsICA0MDAwMDAwKSwKICAgIEcoImhjYSIsICJIZWFsdGhjYXJlIGFzc2lzdGFudHMiLCAiQmFuZCAyLzMiLCAgIDI1OTQ1LCAxMjAwLCAyMDAwMDAwKSwKICAgIEcoImRvYyIsICJNZWRpY3MgKGxvY3VtIC8gU0FTKSIsICAiU0FTIC8gU1QzKyIsIDYwMDAwLCAyMDAsICA3MDAwMDAwKSwKICBdfSwKfTsKCmNvbnN0IEFGQ19CQU5EUyA9IFtbIkJhbmQgMiIsIDI1MjcyXSwgWyJCYW5kIDMiLCAyNjYxOF0sIFsiQmFuZCA1IiwgMzU1NThdLCBbIkJhbmQgNS82IiwgMzk3OThdLCBbIkJhbmQgNiIsIDQ0MDM4XSwgWyJCYW5kIDIvMyIsIDI1OTQ1XSwgWyJTQVMgLyBTVDMrIiwgNjAwMDBdXTsKCi8vIEZyZXNoIGVkaXRhYmxlIGNvcHkgb2YgYSB0eXBlJ3Mgc3RhZmYtZ3JvdXAgcHJvZmlsZS4KY29uc3QgYnVpbGRPcmcgPSBrZXkgPT4gKE9SR19UWVBFU1trZXldIHx8IE9SR19UWVBFUy5hY3V0ZSkuZ3JvdXBzLm1hcChnID0+ICh7IC4uLmcgfSkpOwoKLy8gU2NhbGUgZXZlcnkgZ3JvdXAncyBga2V5YCAoaGVhZGNvdW50IHwgYWdlbmN5U3BlbmQpIHNvIHRoZSBjb2x1bW4gc3VtcyBleGFjdGx5Ci8vIHRvIGB0YXJnZXRgLCBwcmVzZXJ2aW5nIHRoZSBtaXguIExhcmdlc3QtcmVtYWluZGVyIHJvdW5kaW5nICsgYSBwZXItcG9zaXRpdmUtZ3JvdXAKLy8gZmxvb3IgbWVhbiBhIGdyb3VwIG5ldmVyIGNvbGxhcHNlcyB0byAwIChzbyB0aGUgc2l6ZSBjb250cm9sIHN0YXlzIHJldmVyc2libGUpCi8vIGFuZCB0aGUgcGFydHMgYWx3YXlzIHN1bSB0byB0aGUgaGVhZGxpbmUuIE5vLW9wIGZvciB0YXJnZXQgPD0gMC4KZnVuY3Rpb24gc2NhbGVHcm91cHNUbyhncm91cHMsIGtleSwgdGFyZ2V0KSB7CiAgY29uc3QgdmFscyA9IGdyb3Vwcy5tYXAoZyA9PiBudW0oZ1trZXldKSk7CiAgY29uc3QgY3VyID0gdmFscy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTsKICBpZiAoY3VyIDw9IDAgfHwgISh0YXJnZXQgPiAwKSkgcmV0dXJuIGdyb3VwczsKICBjb25zdCB1bml0ID0ga2V5ID09PSAiYWdlbmN5U3BlbmQiID8gMTAwMCA6IDE7ICAgICAgICAvLyByb3VuZCBoZWFkY291bnQgdG8gMSwgc3BlbmQgdG8gwqMxLDAwMAogIGNvbnN0IHRVID0gTWF0aC5yb3VuZCh0YXJnZXQgLyB1bml0KTsKICBpZiAodFUgPD0gMCkgcmV0dXJuIGdyb3VwczsKICBjb25zdCBwb3MgPSB2YWxzLm1hcCh2ID0+IHYgPiAwKTsKICBjb25zdCBuUG9zID0gcG9zLmZpbHRlcihCb29sZWFuKS5sZW5ndGg7CiAgaWYgKHRVIDwgblBvcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFic3VyZGx5IHNtYWxsIHRhcmdldDoga2VlcCB0aGUgbGFyZ2VzdCBncm91cHMgYXQgMSB1bml0LCBuZXZlciBhbGwtemVybwogICAgY29uc3Qgb3JkZXIgPSB2YWxzLm1hcCgodiwgaSkgPT4gKHsgaSwgdiB9KSkuc29ydCgoYSwgYikgPT4gYi52IC0gYS52KTsKICAgIGNvbnN0IG91dCA9IHZhbHMubWFwKCgpID0+IDApOwogICAgZm9yIChsZXQgaiA9IDA7IGogPCB0VTsgaisrKSBvdXRbb3JkZXJbal0uaV0gPSAxOwogICAgcmV0dXJuIGdyb3Vwcy5tYXAoKGcsIGkpID0+ICh7IC4uLmcsIFtrZXldOiBvdXRbaV0gKiB1bml0IH0pKTsKICB9CiAgY29uc3QgcmF3ID0gdmFscy5tYXAodiA9PiAodiAvIGN1cikgKiB0VSk7CiAgY29uc3QgZmwgPSByYXcubWFwKCh4LCBpKSA9PiBwb3NbaV0gPyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHgpKSA6IDApOwogIGxldCByZW0gPSB0VSAtIGZsLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApOwogIGNvbnN0IG9yZGVyID0gcmF3Lm1hcCgoeCwgaSkgPT4gKHsgaSwgZjogeCAtIE1hdGguZmxvb3IoeCksIHBvczogcG9zW2ldIH0pKS5maWx0ZXIobyA9PiBvLnBvcykuc29ydCgoYSwgYikgPT4gYi5mIC0gYS5mKTsKICBsZXQgayA9IDA7CiAgd2hpbGUgKHJlbSA+IDAgJiYgb3JkZXIubGVuZ3RoKSB7IGZsW29yZGVyW2sgJSBvcmRlci5sZW5ndGhdLmldKys7IHJlbS0tOyBrKys7IH0KICB3aGlsZSAocmVtIDwgMCkgeyBsZXQgYmkgPSAtMSwgYnYgPSAxOyBmb3IgKGxldCBpID0gMDsgaSA8IGZsLmxlbmd0aDsgaSsrKSBpZiAoZmxbaV0gPiBidikgeyBidiA9IGZsW2ldOyBiaSA9IGk7IH0gaWYgKGJpIDwgMCkgYnJlYWs7IGZsW2JpXS0tOyByZW0rKzsgfQogIHJldHVybiBncm91cHMubWFwKChnLCBpKSA9PiAoeyAuLi5nLCBba2V5XTogZmxbaV0gKiB1bml0IH0pKTsKfQoKY29uc3QgREVUQUlMRURfREVGQVVMVFMgPSB7CiAgcHJlbWl1bTogMjAsIGRpc3BsYWNlbWVudDogMTMsIHBlckdyb3VwUHJlbWl1bTogZmFsc2UsIHBsYXRmb3JtQ29zdDogUExBVEZPUk1fQ09TVCwgZmlsbFJhdGVOb3c6IDguMywgZGlzcGxhY2VhYmxlU2hhcmU6IDAuODAsIHR1cm5vdmVyOiA0MzAwMDAwMDAsCiAgYWRtaW46ICAgeyBlbmFibGVkOiBmYWxzZSwgbWFuYWdlcnM6IDEyLCBob3Vyc1BlckRheTogQURNSU5fSFJTX1BFUl9EQVksIHdvcmtpbmdEYXlzOiBBRE1JTl9XT1JLSU5HX0RBWVMsIGxvYWRlZEhvdXJseTogQURNSU5fTE9BREVEX0hPVVJMWSB9LAogIHJlY3J1aXQ6IHsgZW5hYmxlZDogZmFsc2UsIHdvcmtlcnM6IDUwLCBjb3N0UGVyV29ya2VyOiAxMDAwLCByZWNvdmVyeVJhdGU6IDAuMTAgfSwKfTsKCmZ1bmN0aW9uIGNhbGNEZXRhaWxlZChpbnB1dCkgewogIGNvbnN0IHsgZ3JvdXBzID0gW10sIHByZW1pdW0gPSAyMCwgZGlzcGxhY2VtZW50ID0gMTMsIHNoaWZ0SG91cnMgPSBTSElGVF9IT1VSUywgb25jb3N0ID0gQkFOS19PTkNPU1QgKiAxMDAsCiAgICAgICAgICBwbGF0Zm9ybUNvc3QgPSBQTEFURk9STV9DT1NULCBhZG1pbiA9IHt9LCByZWNydWl0ID0ge30sIGZpbGxSYXRlTm93ID0gOCwgcGVyR3JvdXBQcmVtaXVtID0gZmFsc2UsIGRpc3BsYWNlYWJsZVNoYXJlID0gRElTUExBQ0VBQkxFX1NIQVJFX0RFRkFVTFQsIHR1cm5vdmVyIH0gPSBpbnB1dDsKICBjb25zdCBkID0gZGlzcGxhY2VtZW50IC8gMTAwLCBvYyA9IG9uY29zdCAvIDEwMDsKICBsZXQgdG90U3BlbmQgPSAwLCB0b3RTYXZpbmcgPSAwLCB0b3REaXNwbGFjZWQgPSAwLCB0b3RIZWFkID0gMCwgdG90Q2FwYWNpdHlWYWx1ZSA9IDA7CiAgY29uc3Qgcm93cyA9IGdyb3Vwcy5tYXAoZyA9PiB7CiAgICBjb25zdCBoZWFkID0gbnVtKGcuaGVhZGNvdW50KSwgc3BlbmQgPSBudW0oZy5hZ2VuY3lTcGVuZCksIHBheSA9IG51bShnLmJhbmtQYXkpOwogICAgY29uc3QgZ3AgPSAoKHBlckdyb3VwUHJlbWl1bSAmJiBnLnByZW1pdW0gIT0gbnVsbCkgPyBudW0oZy5wcmVtaXVtKSA6IHByZW1pdW0pIC8gMTAwOwogICAgY29uc3QgYmFua1NoaWZ0Q29zdCA9IChwYXkgLyBBRkNfRElWSVNPUikgKiBzaGlmdEhvdXJzICogKDEgKyBvYyk7CiAgICBjb25zdCBhZ2VuY3lTaGlmdENvc3QgPSBiYW5rU2hpZnRDb3N0ICogKDEgKyBncCk7CiAgICBjb25zdCBiYXNlbGluZSA9IGFnZW5jeVNoaWZ0Q29zdCA+IDAgPyBzcGVuZCAvIGFnZW5jeVNoaWZ0Q29zdCA6IDA7CiAgICBjb25zdCBkaXNwbGFjZWQgPSBiYXNlbGluZSAqIGRpc3BsYWNlYWJsZVNoYXJlICogZDsgICAvLyBkaXNwbGFjZWFibGUgc2hhcmUgb25seSAoYmVuY2htYXJrIMKnNCk7IGR1dHkgQ09VTlRTIG5lZWQgYSByZWFsIHBheSByYXRlCiAgICAvLyBDYXNoIHZpYSB0aGUgcGF5LWluZGVwZW5kZW50IGlkZW50aXR5IChwYXkvaG91cnMvb24tY29zdCBjYW5jZWwgb3V0IG9mIHRoZSBzYXZpbmcpLAogICAgLy8gc28gYSB6ZXJvIG9yIG1pc3NpbmcgcGF5IHJhdGUgY2Fubm90IHNpbGVudGx5IGRlbGV0ZSBhIGdyb3VwJ3MgY2FzaCAoY29tbWVyY2lhbCBwYXJpdHkpLgogICAgY29uc3Qgc2F2aW5nID0gc3BlbmQgKiBkaXNwbGFjZWFibGVTaGFyZSAqIGQgKiAoZ3AgLyAoMSArIGdwKSk7CiAgICBjb25zdCBjYXBhY2l0eVZhbHVlID0gZGlzcGxhY2VkICogYmFua1NoaWZ0Q29zdDsgICAgICAgICAgICAgIC8vIGdyb3NzIGJhbmsgYmFja2ZpbGwgKE5PTi1jYXNoKQogICAgdG90U3BlbmQgKz0gc3BlbmQ7IHRvdFNhdmluZyArPSBzYXZpbmc7IHRvdERpc3BsYWNlZCArPSBkaXNwbGFjZWQ7IHRvdEhlYWQgKz0gaGVhZDsgdG90Q2FwYWNpdHlWYWx1ZSArPSBjYXBhY2l0eVZhbHVlOwogICAgcmV0dXJuIHsgLi4uZywgaGVhZCwgc3BlbmQsIHBheSwgcHJlbWl1bVBjdDogTWF0aC5yb3VuZChncCAqIDEwMCksIGJhbmtTaGlmdENvc3QsIGFnZW5jeVNoaWZ0Q29zdCwgYmFzZWxpbmUsIGRpc3BsYWNlZCwgc2F2aW5nLCBjYXBhY2l0eVZhbHVlIH07CiAgfSk7CiAgY29uc3QgZFcgPSB0b3REaXNwbGFjZWQgfHwgMTsgICAvLyBkdXRpZXMtd2VpZ2h0ZWQgYXZlcmFnZSBzaGlmdCByYXRlcyBmb3IgdGhlICJob3cgdGhlIHByZW1pdW0gaXMgd29ya2VkIG91dCIgcGFuZWwKICBjb25zdCBiYW5rU2hpZnRDb3N0ID0gcm93cy5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LmJhbmtTaGlmdENvc3QgKiB4LmRpc3BsYWNlZCwgMCkgLyBkVzsKICBjb25zdCBhZ2VuY3lTaGlmdENvc3QgPSByb3dzLnJlZHVjZSgoYSwgeCkgPT4gYSArIHguYWdlbmN5U2hpZnRDb3N0ICogeC5kaXNwbGFjZWQsIDApIC8gZFc7CiAgY29uc3QgbWdycyA9IG51bShhZG1pbi5tYW5hZ2VycyksIGhwZCA9IG51bShhZG1pbi5ob3Vyc1BlckRheSk7CiAgY29uc3QgdGltZVNhdmVkV2VlayA9IG1ncnMgKiBocGQgKiA1OwogIGNvbnN0IGFkbWluU2F2aW5nID0gYWRtaW4uZW5hYmxlZCA\/IG1ncnMgKiBocGQgKiBudW0oYWRtaW4ud29ya2luZ0RheXMpICogbnVtKGFkbWluLmxvYWRlZEhvdXJseSkgOiAwOwogIGNvbnN0IHJlY3J1aXRTYXZpbmcgPSAocmVjcnVpdCAmJiByZWNydWl0LmVuYWJsZWQpID8gbnVtKHJlY3J1aXQud29ya2VycykgKiBudW0ocmVjcnVpdC5jb3N0UGVyV29ya2VyKSAqIG51bShyZWNydWl0LnJlY292ZXJ5UmF0ZSkgOiAwOwogIGNvbnN0IGdyb3NzQmVuZWZpdCA9IHRvdFNhdmluZyArIGFkbWluU2F2aW5nICsgcmVjcnVpdFNhdmluZzsKICBjb25zdCBuZXRTYXZpbmcgPSBncm9zc0JlbmVmaXQgLSBudW0ocGxhdGZvcm1Db3N0KTsKICBjb25zdCByb2lQY3QgPSBwbGF0Zm9ybUNvc3QgPiAwID8gKG5ldFNhdmluZyAvIHBsYXRmb3JtQ29zdCkgKiAxMDAgOiBudWxsOyAgIC8vIG4vYSAobm90IDAlKSB3aGVuIG5vIHBsYXRmb3JtIGNvc3QKICBjb25zdCByb2lNdWx0aXBsZSA9IG51bShwbGF0Zm9ybUNvc3QpID4gMCA\/IG5ldFNhdmluZyAvIG51bShwbGF0Zm9ybUNvc3QpIDogbnVsbDsgICAvLyBuZXQgcmV0dXJuIG9uIHRoZSBsaWNlbmNlIGZlZSAobmV0IHNhdmluZyDDtyBjb3N0KQogIGNvbnN0IHBheWJhY2tNb250aHMgPSBncm9zc0JlbmVmaXQgPiAwID8gcGxhdGZvcm1Db3N0IC8gKGdyb3NzQmVuZWZpdCAvIDEyKSA6IG51bGw7CiAgY29uc3QgZmlsbE5vdyA9IG51bShmaWxsUmF0ZU5vdyksIGZpbGxBZnRlciA9IGZpbGxOb3cgKiAoMSAtIGRpc3BsYWNlYWJsZVNoYXJlICogZCk7ICAgLy8gcmVkdWN0aW9uIG9uIHRoZSBkaXNwbGFjZWFibGUgc2hhcmUgb25seSwgbWF0Y2hpbmcgdGhlIHNpbXBsZSB2YXJpYW50IGFuZCB0aGUgbW9kZWxsZWQgY291bnRzCiAgY29uc3QgcmVnID0gYWdlbmN5UmVnaW1lKHRvdFNwZW5kLCB0dXJub3Zlcik7CiAgcmV0dXJuIHsKICAgIHJvd3MsIHRvdFNwZW5kLCB0b3RTYXZpbmcsIHRvdERpc3BsYWNlZCwgdG90SGVhZCwgdG90Q2FwYWNpdHlWYWx1ZSwKICAgIGFkbWluU2F2aW5nLCByZWNydWl0U2F2aW5nLCB0aW1lU2F2ZWRXZWVrLCBncm9zc0JlbmVmaXQsIG5ldFNhdmluZywgcm9pUGN0LCByb2lNdWx0aXBsZSwgcGF5YmFja01vbnRocywKICAgIGV4Y2VlZHNTcGVuZDogdG90U2F2aW5nID4gdG90U3BlbmQgJiYgdG90U3BlbmQgPiAwLCBhZG1pbk9ubHk6IHRvdFNhdmluZyA8PSAwICYmIChhZG1pblNhdmluZyA+IDAgfHwgcmVjcnVpdFNhdmluZyA+IDApLAogICAgemVyb1BheTogcm93cy5zb21lKHggPT4geC5zcGVuZCA+IDAgJiYgIShudW0oeC5iYW5rUGF5KSA+IDApKSwgICAvLyBjYXNoIHN0aWxsIGNvdW50ZWQ7IGR1dHkgY291bnRzIHVuYXZhaWxhYmxlCiAgICBpbXBsYXVzaWJsZVJvaTogcm9pUGN0ICE9IG51bGwgJiYgcm9pUGN0ID4gMTAwMDAsICAgLy8gPjEwMHgsIHNhbWUgbGluZSBhcyB0aGUgcXVpY2sgbW9kZWwgYW5kIHRoZSBjb21tZXJjaWFsIGJ1aWxkCiAgICBmaWxsTm93LCBmaWxsQWZ0ZXIsIHByZW1pdW0sIGRpc3BsYWNlbWVudCwgcGVyR3JvdXBQcmVtaXVtLCBwbGF0Zm9ybUNvc3Q6IG51bShwbGF0Zm9ybUNvc3QpLCBiYW5rU2hpZnRDb3N0LCBhZ2VuY3lTaGlmdENvc3QsIHNoaWZ0SG91cnMsCiAgICBkaXNwbGFjZWFibGVTaGFyZSwgdHVybm92ZXI6IG51bSh0dXJub3ZlciksIGFnZW5jeVBjdE9mVHVybm92ZXI6IHJlZy5wY3QsIHJlZ2ltZTogcmVnLmtleSwKICAgIC8vIGFsaWFzZXMgc28gdGhlIHNoYXJlZCBSZXN1bHRzUGFnZSBjYW4gcmVuZGVyIGVpdGhlciBtb2RlbCB1bmNoYW5nZWQ6CiAgICBhZ2VuY3lTYXZpbmc6IHRvdFNhdmluZywgZGlzcGxhY2VkOiB0b3REaXNwbGFjZWQsIGNhcGFjaXR5VmFsdWU6IHRvdENhcGFjaXR5VmFsdWUsCiAgfTsKfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNyYy90aGVtZS5qcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLy8gTElHSFQgdGhlbWUg4oCUIHRoZSBSTERhdGl4IHdlYi1jYWxjdWxhdG9yIGRlc2lnbiBzeXN0ZW0gKGRlZXAgdGVhbCArIHNlYWZvYW0KLy8gb24gd2hpdGUpLCBtYXRjaGluZyB0aGUgbWFpbi1icmFuY2ggU21hcnQgTWF0Y2ggd2ViIGJ1aWxkIGFuZCB0aGUgd2lkZXIgUkxEYXRpeCBST0kKLy8gc3VpdGUgc28gdGhlIGNhbGN1bGF0b3Igc2l0cyBjb21mb3J0YWJseSBvbiBybGRhdGl4LmNvbS4gQ29sb3VycyBvbmx5OiB0aGUKLy8ga2lvc2sgYnVpbGQncyBkYXJrIHBhbGV0dGUgbGl2ZXMgb24gdGhlIHNtYXJ0bWF0Y2gtdG91Y2hzY3JlZW4gYnJhbmNoLgpjb25zdCBDID0gewogIGJnOiAiI0VFRjdGMiIsIHN1cmZhY2U6ICIjRkZGRkZGIiwgc3VyZmFjZTI6ICIjRjBGN0Y1IiwgYm9yZGVyOiAiI0Q0RTBERCIsIGJvcmRlckxpZ2h0OiAiI0U4RUZFQyIsCiAgdGV4dDogIiMwRjQxNDYiLCB0ZXh0TWlkOiAiIzNENUE1RSIsIHRleHRNdXRlZDogIiM1Rjc4N0MiLAogIGFjY2VudDogIiMwRjQxNDYiLCBhY2NlbnRNaWQ6ICIjMUE4QTdBIiwgYWNjZW50U29mdDogIiNFOEZBRjYiLCBuYXZ5OiAiIzBGNDE0NiIsIG5hdnlNaWQ6ICIjMUE1NDU5IiwgZ29vZDogIiMxQThBN0EiLCBhbWJlcjogIiM4QTY1MDgiLAogIHNlYWZvYW06ICIjMzRERUMyIiwKICBibHVlOiAiIzJFN0JBNiIsIH07Ci8vIEZsdWlkIHdlYiB0eXBvZ3JhcGh5LiBUaGUga2lvc2sgYnVpbGQgdXNlZCBmaXhlZCBweCBzaXplcyB0dW5lZCBmb3IgYQovLyAxMDgww5cxOTIwIHRvdWNoc2NyZWVuOyB0aGlzIHdlYiB2YXJpYW50IHNjYWxlcyBlYWNoIHN0ZXAgYmV0d2VlbiBhIHBob25lCi8vIGZsb29yIGFuZCBhIGRlc2t0b3AgY2VpbGluZy4gRXZlcnkgY29tcG9uZW50IHJlYWRzIGZvbnRTaXplIGZyb20gRiwgc28gdGhpcwovLyBvbmUgdGFibGUgbWFrZXMgdGhlIHdob2xlIGFwcCByZXNwb25zaXZlLiAoRiB2YWx1ZXMgYXJlIENTUyBzdHJpbmdzIOKAlCBkbwovLyBub3QgdXNlIHRoZW0gaW4gYXJpdGhtZXRpYy4pCmNvbnN0IEYgPSB7CiAgaGVybzogImNsYW1wKDIuNHJlbSwgNy41dncsIDRyZW0pIiwKICBoMTogImNsYW1wKDEuNDVyZW0sIDMuNHZ3LCAxLjlyZW0pIiwKICBoMjogImNsYW1wKDEuMnJlbSwgMi42dncsIDEuNXJlbSkiLAogIGgzOiAiY2xhbXAoMS4wNXJlbSwgMi4ydncsIDEuMjVyZW0pIiwKICBib2R5OiAiY2xhbXAoMC45MnJlbSwgMS43dncsIDEuMDJyZW0pIiwKICBzbWFsbDogImNsYW1wKDAuODVyZW0sIDEuNXZ3LCAwLjkycmVtKSIsCiAgdGlueTogImNsYW1wKDAuNzZyZW0sIDEuMzV2dywgMC44MnJlbSkiLAp9OwovLyBGbHVpZCBob3Jpem9udGFsIGd1dHRlciAod2FzIGEgZml4ZWQgNTZweCBvbiB0aGUga2lvc2spIGFuZCBjb250ZW50IG1heCB3aWR0aC4KY29uc3QgR1VUVEVSID0gImNsYW1wKDE2cHgsIDR2dywgNDRweCkiOwpjb25zdCBNQVhXID0gOTAwOwpjb25zdCBmbXQgPSBuID0+ICLCoyIgKyBNYXRoLnJvdW5kKG4gfHwgMCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIik7CmNvbnN0IGZtdEsgPSBuID0+IHsgbiA9IG4gfHwgMDsgcmV0dXJuIG4gPj0gMWU2ID8gYMKjJHsobi8xZTYpLnRvRml4ZWQoMil9bWAgOiBuID49IDEwMDAgPyBgwqMke01hdGgucm91bmQobi8xMDAwKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKX1rYCA6IGZtdChuKTsgfTsKY29uc3QgZm10TnVtID0gbiA9PiBNYXRoLnJvdW5kKG4gfHwgMCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIik7CmNvbnN0IEtJT1NLX1NURVBTID0gWyJZb3VyIGJhbmsiLCAiQWdlbmN5IiwgIllvdXIgdGVhbSIsICJDb25maWRlbmNlIiwgIlJlc3VsdHMiXTsKCi8qIEJhbmstcmVnaXN0ZXIgc2xpZGVyIHJhbmdlLiBUaGUgdG9wIG1hdGNoZXMgdGhlIGxpY2VuY2UgcHJpY2UgbGlzdCwgd2hpY2ggaXMKICAgYmFuZGVkIGFsbCB0aGUgd2F5IHRvIDEwMCwwMDAgd29ya2Vycywgc28gYW55IG9yZ2FuaXNhdGlvbiB0aGUgbGlzdCBjYW4gcHJpY2UKICAgY2FuIGFsc28gYmUgbW9kZWxsZWQgaGVyZS4KCiAgIFRoZSBzbGlkZXIgcnVucyBvbiBhIExPRyBzY2FsZSByYXRoZXIgdGhhbiBhIGxpbmVhciBvbmUuIE5lYXJseSBldmVyeSBiYW5rCiAgIHJlZ2lzdGVyIHNpdHMgYmVsb3cgMTAsMDAwLCBhbmQgYSBsaW5lYXIgdHJhY2sgZnJvbSA1MCB0byAxMDAsMDAwIHdvdWxkIHB1dAogICByb3VnaGx5IDE3MCB3b3JrZXJzIHVuZGVyIGV2ZXJ5IHBpeGVsOiB0aGUgc2l6ZXMgYWxtb3N0IGV2ZXJ5b25lIG5lZWRzIHdvdWxkCiAgIGJlIHNxdWVlemVkIGludG8gdGhlIGZpcnN0IHRlbnRoIG9mIHRoZSBzbGlkZXIgYW5kIGJlIGltcG9zc2libGUgdG8gc2V0LiBPbiBhCiAgIGxvZyB0cmFjayB0aGUgY29tbW9uIHJhbmdlIGdldHMgaGFsZiB0aGUgd2lkdGggKDIsMDAwIGxhbmRzIG1pZC1zbGlkZXIpIGFuZAogICB0aGUgdGVucyBvZiB0aG91c2FuZHMgc3RpbGwgcmVhY2hhYmxlIGF0IHRoZSBmYXIgZW5kLgoKICAgT25seSB0aGUgdGh1bWIgUE9TSVRJT04gY3VydmVzLiBUaGUgdmFsdWUsIGFuZCBldmVyeSBmaWd1cmUgZGVyaXZlZCBmcm9tIGl0LAogICBhcmUgZXhhY3RseSB3aGF0IHRoZXkgd291bGQgYmUgaWYgdGhlIG51bWJlciB3ZXJlIHR5cGVkIGluLiBgc3RlcHNgIGlzIHRoZQogICByZXNvbHV0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIHJhbmdlIGlucHV0LCBpbiBwb3NpdGlvbnMsIG5vdCB3b3JrZXJzLiAqLwpjb25zdCBCQU5LX01JTiA9IDUwOwpjb25zdCBCQU5LX01BWCA9IDEwMDAwMDsKLyogU25hcCB0byBhIHJvdW5kIG51bWJlciBmb3IgdGhlIHNpemUsIHNvIHRoZSByZWFkb3V0IHJlYWRzIGxpa2Ugc29tZXRoaW5nIGEKICAgcGVyc29uIHdvdWxkIHNheSAoIjMsNTAwIiwgbm90ICIzLDQ4NyIpLiAqLwpjb25zdCBzbmFwQmFuayA9IHYgPT4KICB2IDwgMTAwMCAgPyBNYXRoLnJvdW5kKHYgLyAxMCkgKiAxMCA6CiAgdiA8IDEwMDAwID8gTWF0aC5yb3VuZCh2IC8gNTApICogNTAgOgogIHYgPCA1MDAwMCA\/IE1hdGgucm91bmQodiAvIDUwMCkgKiA1MDAgOgogICAgICAgICAgICAgIE1hdGgucm91bmQodiAvIDEwMDApICogMTAwMDsKY29uc3QgYmFua1NjYWxlID0gewogIHN0ZXBzOiAxMDAwLAogIHRvUG9zOiB2ID0+IE1hdGgucm91bmQoMTAwMCAqIE1hdGgubG9nKE1hdGgubWF4KEJBTktfTUlOLCBNYXRoLm1pbihCQU5LX01BWCwgdikpIC8gQkFOS19NSU4pIC8gTWF0aC5sb2coQkFOS19NQVggLyBCQU5LX01JTikpLAogIGZyb21Qb3M6IHAgPT4gTWF0aC5tYXgoQkFOS19NSU4sIE1hdGgubWluKEJBTktfTUFYLCBzbmFwQmFuayhCQU5LX01JTiAqIE1hdGgucG93KEJBTktfTUFYIC8gQkFOS19NSU4sIHAgLyAxMDAwKSkpKSwKfTsKCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBzcmMvZGF0YUxheWVyLmpzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwovKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgREFUQSBMQVlFUgoKICAgUHVibGlzaGVzIGV2ZXJ5IGNhbGN1bGF0b3IgdmFsdWUgYXMgb25lIHN0cnVjdHVyZWQgb2JqZWN0IHNvIGEgaG9zdCBwYWdlCiAgIGNhbiByZWFkIGl0IHdpdGhvdXQgcGFyc2luZyB0aGUgRE9NOgoKICAgICB3aW5kb3cuc21hcnRNYXRjaFJPSURhdGEgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50IHN0YXRlKQogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzbWFydG1hdGNoLXJvaS11cGRhdGUiLCBlID0+IGUuZGV0YWlsKQogICAgIHBvc3RNZXNzYWdlIHsgdHlwZTogInNtYXJ0bWF0Y2gtcm9pLWRhdGEiLCBkYXRhIH0gICAodG8gdGhlIHBhcmVudCBmcmFtZSkKCiAgIFJhdyBudW1iZXJzIHN0YXkgcmF3OyBgZm10LipgIGNhcnJpZXMgZGlzcGxheS1yZWFkeSBzdHJpbmdzLiBEb2N1bWVudGVkCiAgIGZvciBpbnRlZ3JhdG9ycyBpbiBEQVRBLUxBWUVSLVJFRkVSRU5DRS5tZC4KICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgpjb25zdCBEQVRBX0xBWUVSX1ZFUlNJT04gPSAiMi4wIjsKCmNvbnN0IGRheXMgPSBtID0+IChtID09IG51bGwgPyBudWxsIDogTWF0aC5yb3VuZChtICogMzY1IC8gMTIpKTsKCi8qIEJ1aWxkIHRoZSBwdWJsaXNoZWQgb2JqZWN0IGZyb20gdGhlIGVuZ2luZSByZXN1bHQgKyB0aGUgcmF3IGlucHV0cy4KICAgYGxlYWRgIGlzIG9wdGlvbmFsOiBpdCBvbmx5IGNhcnJpZXMgdmFsdWVzIG9uY2UgYSB2aXNpdG9yIHN1Ym1pdHMgdGhlIGZvcm0uICovCmZ1bmN0aW9uIGJ1aWxkRGF0YShyLCBpbnB1dHMsIGxlYWQpIHsKICBjb25zdCBzdCA9IHN0YW5jZShpbnB1dHMuZGlzcGxhY2VtZW50KTsKICBjb25zdCBhZG1pblZhbHVlID0gaW5wdXRzLmluY2x1ZGVBZG1pbiA\/IHIuYWRtaW5TYXZpbmcgOiBpbnB1dHMubnVtTWFuYWdlcnMgKiAxICogMjI1ICogMTg7CiAgY29uc3Qgc2NlbmFyaW9BdCA9IGQgPT4gewogICAgY29uc3QgcyA9IGlucHV0cy5jYWxjQXQgPyBpbnB1dHMuY2FsY0F0KGQpIDogbnVsbDsKICAgIHJldHVybiBzID8geyBkaXNwbGFjZW1lbnQ6IGQsIGFubnVhbF9jYXNoX3NhdmluZzogTWF0aC5yb3VuZChzLm5ldFNhdmluZyksIGFnZW5jeV9wcmVtaXVtX2F2b2lkZWQ6IE1hdGgucm91bmQocy5hZ2VuY3lTYXZpbmcpLCBwYXliYWNrX2RheXM6IGRheXMocy5wYXliYWNrTW9udGhzKSB9IDogbnVsbDsKICB9OwogIHJldHVybiB7CiAgICBfdmVyc2lvbjogREFUQV9MQVlFUl9WRVJTSU9OLAogICAgX2dlbmVyYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgX3N0YW5jZTogc3Qua2V5LAogICAgX3Byb2R1Y3Q6ICJTbWFydCBNYXRjaCBST0kgKHdlYikiLAoKICAgIHVzZXJfbmFtZTogKGxlYWQgJiYgbGVhZC5uYW1lKSB8fCBudWxsLAogICAgdXNlcl9lbWFpbDogKGxlYWQgJiYgbGVhZC5lbWFpbCkgfHwgbnVsbCwKICAgIHVzZXJfb3JnOiAobGVhZCAmJiBsZWFkLm9yZykgfHwgbnVsbCwKICAgIHVzZXJfcm9sZTogKGxlYWQgJiYgbGVhZC5yb2xlKSB8fCBudWxsLAoKICAgIGJhbmtfd29ya2VyczogaW5wdXRzLmJhbmtQb29sLAogICAgYWdlbmN5X3NwZW5kOiBNYXRoLnJvdW5kKHIuYWdlbmN5U3BlbmQpLAogICAgYWdlbmN5X3NwZW5kX2lzX2VzdGltYXRlZDogaW5wdXRzLmFnZW5jeVNwZW5kID09IG51bGwsCiAgICBhZ2VuY3lfc3BlbmRfcGVyX3dvcmtlcl9iYXNpczogQUdFTkNZX1NQRU5EX1BFUl9SRUdJU1RFUkVEX0JBTktfV09SS0VSX0dCUCwKICAgIGFnZW5jeV9maWxsX3JhdGVfcGN0OiBpbnB1dHMuYWdlbmN5RmlsbFJhdGUsCiAgICB0ZWFtX3NpemU6IGlucHV0cy5udW1NYW5hZ2VycywKICAgIGNvbmZpZGVuY2VfcGN0OiBpbnB1dHMuZGlzcGxhY2VtZW50LAogICAgY29uZmlkZW5jZV9sYWJlbDogc3Qua2V5LAogICAgYWRtaW5fdGltZV9pbl9jYXNoX3RvdGFsOiBpbnB1dHMuaW5jbHVkZUFkbWluID09PSB0cnVlLAoKICAgIGFubnVhbF9jYXNoX3NhdmluZzogTWF0aC5yb3VuZChyLm5ldFNhdmluZyksCiAgICBhZ2VuY3lfcHJlbWl1bV9hdm9pZGVkOiBNYXRoLnJvdW5kKHIuYWdlbmN5U2F2aW5nKSwKICAgIGFkbWluX3RpbWVfdmFsdWU6IE1hdGgucm91bmQoYWRtaW5WYWx1ZSksCiAgICBob3Vyc19yZWxlYXNlZF9wZXJfd2VlazogTWF0aC5yb3VuZChyLnRpbWVTYXZlZFdlZWspLAogICAgZ3Jvc3NfYmVuZWZpdDogTWF0aC5yb3VuZChyLmdyb3NzQmVuZWZpdCksCiAgICBsaWNlbmNlX2ZlZTogTWF0aC5yb3VuZChyLnBsYXRmb3JtQ29zdCksCiAgICBwYXliYWNrX2RheXM6IHIubmV0U2F2aW5nID4gMCA\/IGRheXMoci5wYXliYWNrTW9udGhzKSA6IG51bGwsCiAgICByZXR1cm5fbXVsdGlwbGU6IHIubmV0U2F2aW5nID4gMCAmJiByLnJvaU11bHRpcGxlICE9IG51bGwgPyBNYXRoLnJvdW5kKHIucm9pTXVsdGlwbGUgKiAxMCkgLyAxMCA6IG51bGwsCgogICAgc2hpZnRzX21vdmVkX3RvX2Jhbms6IE1hdGgucm91bmQoci5kaXNwbGFjZWQpLAogICAgYmFua19iYWNrZmlsbF9jb3N0OiBNYXRoLnJvdW5kKHIuY2FwYWNpdHlWYWx1ZSksCiAgICBmaWxsX3JhdGVfYmVmb3JlX3BjdDogTWF0aC5yb3VuZChyLmZpbGxOb3cgKiAxMCkgLyAxMCwKICAgIGZpbGxfcmF0ZV9hZnRlcl9wY3Q6IE1hdGgucm91bmQoci5maWxsQWZ0ZXIgKiAxMCkgLyAxMCwKCiAgICBzY2VuYXJpb3M6IHsKICAgICAgY29uc2VydmF0aXZlOiBzY2VuYXJpb0F0KDEzKSwKICAgICAgbW9kZXJhdGU6IHNjZW5hcmlvQXQoMjYpLAogICAgICBvcHRpbWlzdGljOiBzY2VuYXJpb0F0KDUwKSwKICAgIH0sCgogICAgZm10OiB7CiAgICAgIGFubnVhbF9jYXNoX3NhdmluZzogZm10SyhyLm5ldFNhdmluZyksCiAgICAgIGFnZW5jeV9wcmVtaXVtX2F2b2lkZWQ6IGZtdEsoci5hZ2VuY3lTYXZpbmcpLAogICAgICBhZG1pbl90aW1lX3ZhbHVlOiBmbXRLKGFkbWluVmFsdWUpLAogICAgICBhZ2VuY3lfc3BlbmQ6IGZtdEsoci5hZ2VuY3lTcGVuZCksCiAgICAgIGxpY2VuY2VfZmVlOiBmbXQoci5wbGF0Zm9ybUNvc3QpLAogICAgICBncm9zc19iZW5lZml0OiBmbXRLKHIuZ3Jvc3NCZW5lZml0KSwKICAgICAgaG91cnNfcmVsZWFzZWRfcGVyX3dlZWs6IGZtdE51bShyLnRpbWVTYXZlZFdlZWspLAogICAgICBzaGlmdHNfbW92ZWRfdG9fYmFuazogZm10TnVtKHIuZGlzcGxhY2VkKSwKICAgICAgYmFua19iYWNrZmlsbF9jb3N0OiBmbXRLKHIuY2FwYWNpdHlWYWx1ZSksCiAgICAgIGJhbmtfd29ya2VyczogZm10TnVtKGlucHV0cy5iYW5rUG9vbCksCiAgICAgIHBheWJhY2tfZGF5czogci5uZXRTYXZpbmcgPiAwICYmIHIucGF5YmFja01vbnRocyAhPSBudWxsID8gZm10TnVtKGRheXMoci5wYXliYWNrTW9udGhzKSkgKyAiIGRheXMiIDogIm4vYSIsCiAgICAgIHJldHVybl9tdWx0aXBsZTogci5uZXRTYXZpbmcgPiAwICYmIHIucm9pTXVsdGlwbGUgIT0gbnVsbCA\/IChNYXRoLnJvdW5kKHIucm9pTXVsdGlwbGUgKiAxMCkgLyAxMCkgKyAieCIgOiAibi9hIiwKICAgICAgZmlsbF9yYXRlOiAoTWF0aC5yb3VuZChyLmZpbGxOb3cgKiAxMCkgLyAxMCkgKyAiJSB0byAiICsgKE1hdGgucm91bmQoci5maWxsQWZ0ZXIgKiAxMCkgLyAxMCkgKyAiJSIsCiAgICAgIGRhdGU6IG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIsIHsgZGF5OiAibnVtZXJpYyIsIG1vbnRoOiAibG9uZyIsIHllYXI6ICJudW1lcmljIiB9KSwKICAgIH0sCiAgfTsKfQoKLyogUHVibGlzaDogc2V0IHRoZSBnbG9iYWwsIGZpcmUgdGhlIERPTSBldmVudCwgYW5kIHBvc3QgdG8gdGhlIHBhcmVudCBmcmFtZS4KICAgTmV2ZXIgdGhyb3dzIC0gYSBmYWlsdXJlIGhlcmUgbXVzdCBub3QgYWZmZWN0IHRoZSBjYWxjdWxhdG9yLiAqLwpmdW5jdGlvbiBwdWJsaXNoRGF0YShkYXRhKSB7CiAgdHJ5IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAidW5kZWZpbmVkIikgcmV0dXJuOwogICAgd2luZG93LnNtYXJ0TWF0Y2hST0lEYXRhID0gZGF0YTsKICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic21hcnRtYXRjaC1yb2ktdXBkYXRlIiwgeyBkZXRhaWw6IGRhdGEgfSkpOwogICAgaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHsgdHlwZTogInNtYXJ0bWF0Y2gtcm9pLWRhdGEiLCBkYXRhIH0sICIqIik7CiAgfSBjYXRjaCAoZSkgeyAvKiBob3N0IGdvbmUsIG9yIHN0cnVjdHVyZWQtY2xvbmUgcmVmdXNlZDogaWdub3JlICovIH0KfQoKLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNyYy9sZWFkL2NvcmUuanMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBMRUFEIENBUFRVUkUgQ09SRSAtIG5vIGZyYW1ld29yaywgbm8gRE9NIHJlbmRlcmluZy4KCiAgIEV2ZXJ5dGhpbmcgdGhlIGxlYWQgZm9ybSBkb2VzIHRoYXQgaXMgbm90IGRyYXdpbmcgcGl4ZWxzOiB0aGUgSHViU3BvdAogICBjb25maWd1cmF0aW9uLCB0aGUgc3VibWlzc2lvbiBpdHNlbGYsIHRoZSBQREYgcmVwb3J0IGFuZCB0aGUgbG9jYWwgYmFja3VwLgoKICAgVGhpcyBmaWxlIGlzIHNoYXJlZCB2ZXJiYXRpbSBieSBib3RoIGJ1aWxkcyBvZiB0aGUgY2FsY3VsYXRvciwgdGhlIFJlYWN0CiAgIG9uZSBhbmQgdGhlIHBsYWluLUpTIG9uZSwgc28gdGhlIGZvcm0gR1VJRCwgdGhlIGZpZWxkcyBzZW50LCB0aGUgcGFnZVVyaQogICBmYWxsYmFjayBhbmQgdGhlIFBERiBsYXlvdXQgYXJlIGxpdGVyYWxseSB0aGUgc2FtZSBjb2RlIGluIGJvdGguIFRoZXkKICAgY2Fubm90IGRyaWZ0IGFwYXJ0LCBhbmQgYSBmaXggaGVyZSByZWFjaGVzIGJvdGggYXQgb25jZS4KCiAgIFRoZSBzdWJtaXNzaW9uIGlzOiBQREYgZmlyc3QsIGxvY2FsIGJhY2t1cCBzZWNvbmQsIEh1YlNwb3QgbGFzdC4gVGhlCiAgIHZpc2l0b3IncyByZXBvcnQgbmV2ZXIgd2FpdHMgb24gdGhlIG5ldHdvcmssIGJ1dCB0aGUgcmVzcG9uc2UgSVMgY2hlY2tlZCwKICAgYmVjYXVzZSBzaWxlbnRseSBkaXNjYXJkaW5nIGEgcmVqZWN0aW9uIGlzIGhvdyBhIGJyb2tlbiBsZWFkIGZvcm0gY29tZXMgdG8KICAgbG9vayBsaWtlIGEgd29ya2luZyBvbmUuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLyogRGVkaWNhdGVkIFNtYXJ0IE1hdGNoIGZvcm0gb24gdGhlIFJMRGF0aXggSHViU3BvdCBwb3J0YWwgKEVVIGRhdGEgY2VudHJlKS4KICAgVG8gcG9pbnQgdGhlIGNhbGN1bGF0b3IgYXQgYSBkaWZmZXJlbnQgZm9ybSwgY2hhbmdlIHRoZSBHVUlEIG9ubHkuICovCmNvbnN0IEhVQlNQT1RfUE9SVEFMX0lEID0gIjI3MTc0NDA4IjsKY29uc3QgSFVCU1BPVF9GT1JNX0dVSUQgPSAiN2JiYmE0ZjItMjA0NS00NThkLWEzMzktYjA2ZTVlN2ExNmQ3IjsKY29uc3QgSFVCU1BPVF9SRUdJT04gPSAiZXUxIjsgICAvLyBFVSBkYXRhIGNlbnRyZQoKY29uc3QgU1RPUkFHRV9LRVkgPSAic21hcnRtYXRjaC1yb2ktd2ViLXN1Ym1pc3Npb25zIjsKY29uc3QgTUFYX1JFQ09SRFMgPSAyMDA7Cgpjb25zdCBST0xFX09QVElPTlMgPSBbCiAgIldvcmtmb3JjZSAvIEhSIERpcmVjdG9yIChDUE8pIiwKICAiRmluYW5jZSAvIEJ1c2luZXNzIENhc2UiLAogICJUZW1wb3JhcnkgU3RhZmZpbmcgLyBCYW5rIExlYWQiLAogICJSb3N0ZXIgLyBlLVJvc3RlcmluZyBNYW5hZ2VyIiwKICAiQ2hpZWYgTnVyc2UgLyBDTk8gdGVhbSIsCiAgIkRpZ2l0YWwgLyBDSU8gdGVhbSIsCiAgIk90aGVyIiwKXTsKCi8qIFRoZSBwYWdlIHRvIGF0dHJpYnV0ZSB0aGUgc3VibWlzc2lvbiB0by4gYGxvY2F0aW9uLmhyZWZgIGlzIHRoZSBhbnN3ZXIgaW4KICAgZXZlcnkgbm9ybWFsIGVtYmVkLCBidXQgaXQgaXMgdGhlIGxpdGVyYWwgc3RyaW5nICJhYm91dDpzcmNkb2MiIHdoZW4gYSBob3N0CiAgIGluamVjdHMgdGhlIGNhbGN1bGF0b3IgdmlhIGlmcmFtZSBzcmNkb2MsIGFuZCBhIGZpbGU6Ly8gcGF0aCB3aGVuIHNvbWVvbmUKICAgb3BlbnMgdGhlIEhUTUwgZnJvbSBkaXNrLiBOZWl0aGVyIGlzIGEgVVJMIEh1YlNwb3Qgd2lsbCBhY2NlcHQsIHNvIGZhbGwgYmFjawogICB0byB0aGUgcGFyZW50IHBhZ2U6IGEgc3JjZG9jIGRvY3VtZW50IGluaGVyaXRzIGl0cyBiYXNlIFVSTCBmcm9tIGl0cyBwYXJlbnQsCiAgIGFuZCB0aGUgcmVmZXJyZXIgY2FycmllcyBpdCBvdGhlcndpc2UuIHBhZ2VVcmkgaXMgb3B0aW9uYWwgaW4gdGhlIEZvcm1zIEFQSSwKICAgc28gaWYgbm9uZSBvZiB0aGUgdGhyZWUgaXMgdXNhYmxlIHdlIG9taXQgdGhlIGZpZWxkIHJhdGhlciB0aGFuIHNlbmQganVuay4gKi8KY29uc3QgaXNIdHRwVXJsID0gdSA9PiAvXmh0dHBzPzovaS50ZXN0KHUgfHwgIiIpOwoKLyogVGhlIEhPU1QgcGFnZSdzIFVSTCwgYW5ub3VuY2VkIGJ5IHRoZSBlbWJlZCBzbmlwcGV0IHZpYSBwb3N0TWVzc2FnZQogICAoe3R5cGU6InNtYXJ0bWF0Y2gtcm9pLWhvc3QiLCBocmVmfSkuIEluc2lkZSBhIGNyb3NzLW9yaWdpbiBpZnJhbWUsCiAgIGxvY2F0aW9uLmhyZWYgaXMgdGhlIGNhbGN1bGF0b3IncyBvd24gb3JpZ2luIChlLmcuIHRoZSBWZXJjZWwgVVJMKSwgbm90IHRoZQogICBwYWdlIHRoZSB2aXNpdG9yIGlzIGFjdHVhbGx5IG9uIChlLmcuIHJsZGF0aXguY29tL2VuLXVraS9zbWFydC1tYXRjaC1yb2ktCiAgIGNhbGN1bGF0b3IvKSwgYW5kIHRoZSBkZWZhdWx0IHJlZmVycmVyIHBvbGljeSBzdHJpcHMgdGhlIHBhcmVudCdzIHBhdGguIFRoZQogICBzbmlwcGV0IHRlbGxzIHVzLCBzbyBsZWFkcyBhcmUgYXR0cmlidXRlZCB0byB0aGUgcmVhbCBwYWdlLiBEYXRhIG9ubHk6IHRoZQogICB2YWx1ZSBpcyB1c2VkIHNvbGVseSBhcyBhIFVSTCBzdHJpbmcsIGFuZCBvbmx5IGlmIGl0IHBhcnNlcyBhcyBodHRwKHMpLiAqLwpsZXQgaG9zdFBhZ2VIcmVmID0gbnVsbDsKaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBlID0+IHsKICAgIGNvbnN0IGQgPSBlLmRhdGE7CiAgICBpZiAoZCAmJiBkLnR5cGUgPT09ICJzbWFydG1hdGNoLXJvaS1ob3N0IiAmJiB0eXBlb2YgZC5ocmVmID09PSAic3RyaW5nIiAmJiBpc0h0dHBVcmwoZC5ocmVmKSkgaG9zdFBhZ2VIcmVmID0gZC5ocmVmOwogIH0pOwp9CmNvbnN0IGhvc3RIcmVmID0gKCkgPT4gaG9zdFBhZ2VIcmVmOwoKZnVuY3Rpb24gcGFnZVVyaSgpIHsKICByZXR1cm4gWwogICAgaG9zdFBhZ2VIcmVmLAogICAgdHlwZW9mIGxvY2F0aW9uICE9PSAidW5kZWZpbmVkIiA\/IGxvY2F0aW9uLmhyZWYgOiBudWxsLAogICAgdHlwZW9mIGRvY3VtZW50ICE9PSAidW5kZWZpbmVkIiA\/IGRvY3VtZW50LmJhc2VVUkkgOiBudWxsLAogICAgdHlwZW9mIGRvY3VtZW50ICE9PSAidW5kZWZpbmVkIiA\/IGRvY3VtZW50LnJlZmVycmVyIDogbnVsbCwKICBdLmZpbmQoaXNIdHRwVXJsKTsKfQoKZnVuY3Rpb24gcmVhZFN1Ym1pc3Npb25zKCkgewogIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfS0VZKSB8fCAiW10iKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0KfQoKZnVuY3Rpb24gc2F2ZVN1Ym1pc3Npb24ocmVjb3JkKSB7CiAgdHJ5IHsKICAgIGNvbnN0IGV4aXN0aW5nID0gcmVhZFN1Ym1pc3Npb25zKCk7CiAgICBleGlzdGluZy51bnNoaWZ0KHJlY29yZCk7CiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoZXhpc3Rpbmcuc2xpY2UoMCwgTUFYX1JFQ09SRFMpKSk7CiAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLndhcm4oIkxvY2FsIGJhY2t1cCBmYWlsZWQ6IiwgZSk7IH0KfQoKZnVuY3Rpb24gY2xlYXJTdWJtaXNzaW9ucygpIHsKICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShTVE9SQUdFX0tFWSk7IH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH0KfQoKLyogQ1NWIG9mIHRoZSBsb2NhbCBiYWNrdXAsIGZvciB0aGUgI2FkbWluLWxlYWRzIHZpZXcuICovCmZ1bmN0aW9uIHN1Ym1pc3Npb25zQ1NWKHJlY29yZHMpIHsKICBjb25zdCBlc2MgPSB2ID0+ICciJyArIFN0cmluZyh2ID09IG51bGwgPyAiIiA6IHYpLnJlcGxhY2UoLyIvZywgJyIiJykgKyAnIic7CiAgY29uc3Qgcm93cyA9IFtbIlRpbWVzdGFtcCIsICJOYW1lIiwgIkVtYWlsIiwgIk9yZ2FuaXNhdGlvbiIsICJSb2xlIiwgIkJhbmsgd29ya2VycyIsICJBZ2VuY3kgZmlsbCAlIiwgIlRlYW0iLCAiQ29uZmlkZW5jZSAlIiwgIlN0YW5jZSIsICJOZXQgc2F2aW5nIiwgIkhvdXJzL3dlZWsiXV07CiAgZm9yIChjb25zdCByZWMgb2YgcmVjb3Jkcykgcm93cy5wdXNoKFsKICAgIHJlYy50aW1lc3RhbXAsIHJlYy5sZWFkICYmIHJlYy5sZWFkLm5hbWUsIHJlYy5sZWFkICYmIHJlYy5sZWFkLmVtYWlsLCByZWMubGVhZCAmJiByZWMubGVhZC5vcmcsIHJlYy5sZWFkICYmIHJlYy5sZWFkLnJvbGUsCiAgICByZWMuaW5wdXRzICYmIHJlYy5pbnB1dHMuYmFua1Bvb2wsIHJlYy5pbnB1dHMgJiYgcmVjLmlucHV0cy5hZ2VuY3lGaWxsUmF0ZSwgcmVjLmlucHV0cyAmJiByZWMuaW5wdXRzLm51bU1hbmFnZXJzLAogICAgcmVjLmlucHV0cyAmJiByZWMuaW5wdXRzLmRpc3BsYWNlbWVudCwgcmVjLmlucHV0cyAmJiByZWMuaW5wdXRzLnN0YW5jZSwKICAgIHJlYy5yZXN1bHRzICYmIHJlYy5yZXN1bHRzLm5ldFNhdmluZywgcmVjLnJlc3VsdHMgJiYgcmVjLnJlc3VsdHMudGltZVNhdmVkV2VlaywKICBdKTsKICByZXR1cm4gcm93cy5tYXAocm93ID0+IHJvdy5tYXAoZXNjKS5qb2luKCIsIikpLmpvaW4oIlxuIik7Cn0KCi8vIEZldGNoIHRoZSBidW5kbGVkIHdoaXRlIFJMRGF0aXggd29yZG1hcmsgYXMgYSBkYXRhIFVSTCBmb3IganNQREYgKGJlc3QtZWZmb3J0KS4KYXN5bmMgZnVuY3Rpb24gbG9nb0RhdGFVcmwoKSB7CiAgdHJ5IHsKICAgIGNvbnN0IGltZyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4geyBjb25zdCBpID0gbmV3IEltYWdlKCk7IGkub25sb2FkID0gKCkgPT4gcmVzKGkpOyBpLm9uZXJyb3IgPSByZWo7IGkuc3JjID0gcmxkYXRpeExvZ287IH0pOwogICAgLy8gRG93bnNjYWxlIGJlZm9yZSBlbWJlZGRpbmc6IGpzUERGIHN0b3JlcyBQTkdzIGFzIHJhdyBwaXhlbHMsIHNvIHRoZQogICAgLy8gZnVsbC1zaXplIGFzc2V0IHdvdWxkIGJsb2F0IHRoZSBmaWxlIGJ5IG1lZ2FieXRlcy4KICAgIGNvbnN0IHcgPSA0MDAsIGggPSBNYXRoLnJvdW5kKHcgKiBpbWcuaGVpZ2h0IC8gaW1nLndpZHRoKTsKICAgIGNvbnN0IGN2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7IGN2LndpZHRoID0gdzsgY3YuaGVpZ2h0ID0gaDsKICAgIGN2LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGltZywgMCwgMCwgdywgaCk7CiAgICByZXR1cm4gY3YudG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKICB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9Cn0KCi8qIE9uZS1wYWdlIFBERiBzdW1tYXJ5LgogICBMYXlvdXQgbWlycm9ycyB0aGUgcmVwb3J0IHBhZ2U6IG5hdnkgaGVhZGVyIHdpdGggdGhlIHdoaXRlIFJMRGF0aXggd29yZG1hcmsKICAgdG9wLXJpZ2h0LCB0d28gaGVhZGxpbmUgY2FsbG91dCBib3hlcywgYSBLUEkgcm93IChpbmNsLiB0aGUgYWRtaW4tdGltZSB2YWx1ZSwKICAgbWFya2VkIGluL291dCBvZiB0aGUgY2FzaCB0b3RhbCksIHRoZW4gWW91ciBpbnB1dHMgKyBDYXBhY2l0eSBzaWRlIGJ5IHNpZGUsCiAgIHRoZSB3b3JrZWQtb3V0IGVxdWF0aW9uIHN0cmlwLCBhbmQgdGhlIGRpc2NsYWltZXIuIFJMRGF0aXggbGlnaHQgcGFsZXR0ZS4gKi8KYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQREYociwgbGVhZCwgY3R4KSB7CiAgY29uc3QgeyBqc1BERiB9ID0gYXdhaXQgbG9hZEpzUERGKCk7CiAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgdW5pdDogIm1tIiwgZm9ybWF0OiAiYTQiLCBjb21wcmVzczogdHJ1ZSB9KTsKICBjb25zdCBOQVZZID0gWzE1LCA2NSwgNzBdLCBURUFMID0gWzI2LCAxMzgsIDEyMl0sIFNFQUZPQU0gPSBbNTIsIDIyMiwgMTk0XSwKICAgICAgICBQQUxFID0gWzIzOCwgMjQ3LCAyNDJdLCBQQUxFX1NFQSA9IFsyMzIsIDI1MCwgMjQ2XSwgQk9SREVSID0gWzIxMiwgMjI0LCAyMjFdLAogICAgICAgIFRFWFQgPSBbMTUsIDY1LCA3MF0sIE1JRCA9IFs2MSwgOTAsIDk0XSwgTVVURUQgPSBbMTIwLCAxMzAsIDE1MF07CiAgY29uc3QgTSA9IDE0LCBXID0gMjEwIC0gMiAqIE07ICAgLy8gbWFyZ2lucyAvIHVzYWJsZSB3aWR0aAogIGNvbnN0IG5vTmV0ID0gci5uZXRTYXZpbmcgPD0gMDsKICBjb25zdCBwYXliYWNrRGF5cyA9IG0gPT4gbSA9PSBudWxsID8gIm4vYSIgOiBNYXRoLnJvdW5kKG0gKiAzNjUgLyAxMikudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikgKyAiIGRheXMiOwogIC8vIEFkbWluLXRpbWUgdmFsdWUgaXMgYWx3YXlzIHJlcG9ydGVkOiBpbiB0aGUgY2FzaCB0b3RhbCB3aGVuIHRvZ2dsZWQgb24sCiAgLy8gb3RoZXJ3aXNlIGFzIGl0cyBvd24gc2VwYXJhdGVseS1zaG93biBmaWd1cmUuCiAgY29uc3QgYWRtaW5WYWx1ZSA9IGN0eC5pbmNsdWRlQWRtaW4gPyByLmFkbWluU2F2aW5nIDogY3R4Lm51bU1hbmFnZXJzICogMSAqIDIyNSAqIDE4OwoKICAvLyDilIDilIAgSGVhZGVyIGJhbmQg4pSA4pSACiAgZG9jLnNldEZpbGxDb2xvciguLi5OQVZZKTsgZG9jLnJlY3QoMCwgMCwgMjEwLCAzNCwgIkYiKTsKICBkb2Muc2V0RmlsbENvbG9yKC4uLlNFQUZPQU0pOyBkb2MucmVjdCgwLCAzNCwgMjEwLCAxLjQsICJGIik7CiAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRGb250U2l6ZSgxNyk7CiAgZG9jLnRleHQoIlNtYXJ0IE1hdGNoOiBXb3JrZm9yY2UgUk9JIEVzdGltYXRlIiwgTSwgMTYpOwogIGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAibm9ybWFsIik7IGRvYy5zZXRGb250U2l6ZSg5KTsgZG9jLnNldFRleHRDb2xvciguLi5TRUFGT0FNKTsKICBkb2MudGV4dCgiUkxEYXRpeCBCYW5rU3RhZmYrIMK3ICIgKyBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiKSArIChsZWFkLm9yZyA\/ICIgwrcgIiArIGxlYWQub3JnIDogIiIpLCBNLCAyNCk7CiAgY29uc3QgbG9nbyA9IGF3YWl0IGxvZ29EYXRhVXJsKCk7CiAgaWYgKGxvZ28pIHsgdHJ5IHsgZG9jLmFkZEltYWdlKGxvZ28sICJQTkciLCAyMTAgLSBNIC0gMzgsIDksIDM4LCA3LjMpOyB9IGNhdGNoIChlKSB7IC8qIGhlYWRlciBzdGlsbCBmaW5lIHdpdGhvdXQgaXQgKi8gfSB9CgogIC8vIOKUgOKUgCBIZWFkbGluZSBjYWxsb3V0cyDilIDilIAKICBsZXQgeSA9IDQyOwogIGRvYy5zZXRUZXh0Q29sb3IoLi4uTVVURUQpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgImJvbGQiKTsgZG9jLnNldEZvbnRTaXplKDguNSk7CiAgZG9jLnRleHQoIllPVVIgRVNUSU1BVEVEIEFOTlVBTCBJTVBBQ1QiLCBNLCB5KTsgeSArPSAzOwogIGNvbnN0IGhiVyA9IChXIC0gNCkgLyAyLCBoYkggPSAyODsKICBjb25zdCBoZWFkbGluZUJveCA9ICh4LCBiaWcsIGxhYmVsLCBzdWIpID0+IHsKICAgIGRvYy5zZXRGaWxsQ29sb3IoLi4uUEFMRV9TRUEpOyBkb2Muc2V0RHJhd0NvbG9yKC4uLlRFQUwpOwogICAgZG9jLnJvdW5kZWRSZWN0KHgsIHksIGhiVywgaGJILCAyLjUsIDIuNSwgIkZEIik7CiAgICBkb2Muc2V0VGV4dENvbG9yKC4uLlRFQUwpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgImJvbGQiKTsgZG9jLnNldEZvbnRTaXplKDIxKTsKICAgIGRvYy50ZXh0KGJpZywgeCArIGhiVyAvIDIsIHkgKyAxMywgeyBhbGlnbjogImNlbnRlciIgfSk7CiAgICBkb2Muc2V0VGV4dENvbG9yKC4uLlRFWFQpOyBkb2Muc2V0Rm9udFNpemUoOS41KTsKICAgIGRvYy50ZXh0KGxhYmVsLCB4ICsgaGJXIC8gMiwgeSArIDIwLCB7IGFsaWduOiAiY2VudGVyIiB9KTsKICAgIGRvYy5zZXRUZXh0Q29sb3IoLi4uTUlEKTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJub3JtYWwiKTsgZG9jLnNldEZvbnRTaXplKDcuNSk7CiAgICBkb2MudGV4dChzdWIsIHggKyBoYlcgLyAyLCB5ICsgMjQuNSwgeyBhbGlnbjogImNlbnRlciIgfSk7CiAgfTsKICBoZWFkbGluZUJveChNLAogICAgbm9OZXQgPyAiTm8gbmV0IGNhc2ggc2F2aW5nIiA6IGZtdChNYXRoLnJvdW5kKHIubmV0U2F2aW5nKSksCiAgICBub05ldCA\/ICJhdCB0aGlzIHNjYWxlIiA6ICJQb3RlbnRpYWwgYW5udWFsIGNhc2ggc2F2aW5nIiwKICAgIG5vTmV0ID8gImxpY2VuY2UgZmVlIGV4Y2VlZHMgdGhlIG1vZGVsbGVkIHByZW1pdW0iIDogImFmdGVyIHRoZSAiICsgZm10KHIucGxhdGZvcm1Db3N0KSArICIveXIgbGljZW5jZSBmZWUiKTsKICBoZWFkbGluZUJveChNICsgaGJXICsgNCwKICAgIGZtdE51bShyLnRpbWVTYXZlZFdlZWspICsgIiBocnMiLAogICAgInJlbGVhc2VkIGVhY2ggd2VlayIsCiAgICAidGVtcG9yYXJ5IHN0YWZmaW5nIHRlYW0gdGltZSBnaXZlbiBiYWNrIik7CiAgeSArPSBoYkggKyA2OwoKICAvLyDilIDilIAgS1BJIHJvdyDilIDilIAKICBjb25zdCBrVyA9IChXIC0gOSkgLyA0LCBrSCA9IDIxOwogIGNvbnN0IGtwaXMgPSBbCiAgICBbIkFHRU5DWSBQUkVNSVVNIEFWT0lERUQiLCBmbXQoTWF0aC5yb3VuZChyLmFnZW5jeVNhdmluZykpLCAiYWdlbmN5IHZzIGJhbmsgZ2FwLCBleGNsdWRpbmcgbGljZW5jZSBmZWUiXSwKICAgIFsiQURNSU4gVElNRSBWQUxVRSIsIGZtdChNYXRoLnJvdW5kKGFkbWluVmFsdWUpKSwgY3R4LmluY2x1ZGVBZG1pbiA\/ICJpbmNsdWRlZCBpbiB0aGUgY2FzaCB0b3RhbCIgOiAic2hvd24gc2VwYXJhdGVseSwgbm90IGluIHRoZSBjYXNoIHRvdGFsIl0sCiAgICBbIlBBWUJBQ0siLCBub05ldCA\/ICJuL2EiIDogcGF5YmFja0RheXMoci5wYXliYWNrTW9udGhzKSwgInRvIHJlY292ZXIgdGhlIGFubnVhbCBsaWNlbmNlIGZlZSJdLAogICAgWyJSRVRVUk4iLCAobm9OZXQgfHwgci5yb2lNdWx0aXBsZSA9PSBudWxsKSA\/ICJuL2EiIDogKE1hdGgucm91bmQoci5yb2lNdWx0aXBsZSAqIDEwKSAvIDEwKSArICJ4IiwgIm5ldCBzYXZpbmcgw7cgbGljZW5jZSBmZWUsIHBlciB5ZWFyIl0sCiAgXTsKICBrcGlzLmZvckVhY2goKFtsYWJlbCwgdmFsLCBzdWJdLCBpKSA9PiB7CiAgICBjb25zdCB4ID0gTSArIGkgKiAoa1cgKyAzKTsKICAgIGRvYy5zZXRGaWxsQ29sb3IoMjU1LCAyNTUsIDI1NSk7IGRvYy5zZXREcmF3Q29sb3IoLi4uQk9SREVSKTsKICAgIGRvYy5yb3VuZGVkUmVjdCh4LCB5LCBrVywga0gsIDIsIDIsICJGRCIpOwogICAgZG9jLnNldFRleHRDb2xvciguLi5NVVRFRCk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiYm9sZCIpOyBkb2Muc2V0Rm9udFNpemUoNi4zKTsKICAgIGRvYy50ZXh0KGxhYmVsLCB4ICsgMywgeSArIDUpOwogICAgZG9jLnNldFRleHRDb2xvciguLi5OQVZZKTsgZG9jLnNldEZvbnRTaXplKDEyLjUpOwogICAgZG9jLnRleHQoU3RyaW5nKHZhbCksIHggKyAzLCB5ICsgMTEuNSk7CiAgICBkb2Muc2V0VGV4dENvbG9yKC4uLk1JRCk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAibm9ybWFsIik7IGRvYy5zZXRGb250U2l6ZSg2LjIpOwogICAgZG9jLnRleHQoZG9jLnNwbGl0VGV4dFRvU2l6ZShzdWIsIGtXIC0gNiksIHggKyAzLCB5ICsgMTUuNSk7CiAgfSk7CiAgeSArPSBrSCArIDc7CgogIC8vIOKUgOKUgCBDb25maWRlbmNlIHNjZW5hcmlvczogZXZlcnkgc3RhbmNlIG1vZGVsbGVkLCB0aGUgY2hvc2VuIG9uZSBmbGFnZ2VkIOKUgOKUgAogIC8vIEVhY2ggdGlsZSByZWNvbXB1dGVzIHRoZSB3aG9sZSBtb2RlbCBhdCB0aGF0IGNvbmZpZGVuY2UgbGV2ZWwgKHNhbWUgYmFuawogIC8vIHNpemUsIGZpbGwgcmF0ZSwgdGVhbSBhbmQgYWRtaW4gY2hvaWNlKTsgdGhlIG9uZSBtYXRjaGluZyB0aGUgdmlzaXRvcidzCiAgLy8gc2VsZWN0aW9uIGluIHRoZSBmbG93IGlzIGhpZ2hsaWdodGVkLgogIGNvbnN0IGNob3NlbktleSA9IHN0YW5jZShjdHguZGlzcGxhY2VtZW50KS5rZXk7CiAgY29uc3Qgc2NlbmFyaW9zID0gW1siQ29uc2VydmF0aXZlIiwgMTNdLCBbIk1vZGVyYXRlIiwgMjZdLCBbIk9wdGltaXN0aWMiLCA1MF1dLm1hcCgoW2tleSwgZF0pID0+IHsKICAgIGNvbnN0IHJyID0gY2FsYyh7IGJhbmtQb29sOiBjdHguYmFua1Bvb2wsIGFnZW5jeUZpbGxSYXRlOiBjdHguYWdlbmN5RmlsbFJhdGUsIG51bU1hbmFnZXJzOiBjdHgubnVtTWFuYWdlcnMsIGRpc3BsYWNlbWVudDogZCwgaW5jbHVkZUFkbWluOiBjdHguaW5jbHVkZUFkbWluLCBhZ2VuY3lTcGVuZDogY3R4LmFnZW5jeVNwZW5kLCBwbGF0Zm9ybUNvc3Q6IHIucGxhdGZvcm1Db3N0IH0pOwogICAgcmV0dXJuIHsga2V5LCBkLCByciwgc2VsZWN0ZWQ6IGtleSA9PT0gY2hvc2VuS2V5IH07CiAgfSk7CiAgZG9jLnNldFRleHRDb2xvciguLi5NVVRFRCk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiYm9sZCIpOyBkb2Muc2V0Rm9udFNpemUoOC41KTsKICBkb2MudGV4dCgiU0FWSU5HIEJZIENPTkZJREVOQ0UgTEVWRUwiLCBNLCB5KTsgeSArPSAzOwogIGNvbnN0IHNXID0gKFcgLSA4KSAvIDMsIHNIID0gNDc7CiAgc2NlbmFyaW9zLmZvckVhY2goKHMsIGkpID0+IHsKICAgIGNvbnN0IHggPSBNICsgaSAqIChzVyArIDQpOwogICAgaWYgKHMuc2VsZWN0ZWQpIHsgZG9jLnNldEZpbGxDb2xvciguLi5QQUxFX1NFQSk7IGRvYy5zZXREcmF3Q29sb3IoLi4uVEVBTCk7IGRvYy5zZXRMaW5lV2lkdGgoMC43KTsgfQogICAgZWxzZSB7IGRvYy5zZXRGaWxsQ29sb3IoMjU1LCAyNTUsIDI1NSk7IGRvYy5zZXREcmF3Q29sb3IoLi4uQk9SREVSKTsgZG9jLnNldExpbmVXaWR0aCgwLjIpOyB9CiAgICBkb2Mucm91bmRlZFJlY3QoeCwgeSwgc1csIHNILCAyLjUsIDIuNSwgIkZEIik7CiAgICBkb2Muc2V0TGluZVdpZHRoKDAuMik7CiAgICAvLyBoZWFkZXI6IHN0YW5jZSBuYW1lICsgJSAoKyBTRUxFQ1RFRCBwaWxsKQogICAgZG9jLnNldFRleHRDb2xvciguLi5OQVZZKTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRGb250U2l6ZSg5LjUpOwogICAgZG9jLnRleHQocy5rZXksIHggKyA0LCB5ICsgOCk7CiAgICBkb2Muc2V0VGV4dENvbG9yKC4uLk1JRCk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAibm9ybWFsIik7IGRvYy5zZXRGb250U2l6ZSg3LjUpOwogICAgZG9jLnRleHQocy5kICsgIiUgdG8gYmFuayIsIHggKyA0LCB5ICsgMTIuNSk7CiAgICBpZiAocy5zZWxlY3RlZCkgewogICAgICBkb2Muc2V0RmlsbENvbG9yKC4uLlRFQUwpOyBkb2Mucm91bmRlZFJlY3QoeCArIHNXIC0gMjcsIHkgKyAzLjUsIDIzLCA1LjUsIDIuNzUsIDIuNzUsICJGIik7CiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoMjU1LCAyNTUsIDI1NSk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiYm9sZCIpOyBkb2Muc2V0Rm9udFNpemUoNik7CiAgICAgIGRvYy50ZXh0KCJZT1VSIENIT0lDRSIsIHggKyBzVyAtIDE1LjUsIHkgKyA3LjIsIHsgYWxpZ246ICJjZW50ZXIiIH0pOwogICAgfQogICAgLy8gbmV0IHNhdmluZyBoZWFkbGluZQogICAgY29uc3QgbmV0ID0gcy5yci5uZXRTYXZpbmc7CiAgICBkb2Muc2V0VGV4dENvbG9yKC4uLlRFQUwpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgImJvbGQiKTsgZG9jLnNldEZvbnRTaXplKDE1KTsKICAgIGRvYy50ZXh0KG5ldCA+IDAgPyBmbXRLKG5ldCkgOiAiTm8gbmV0IHNhdmluZyIsIHggKyA0LCB5ICsgMjEpOwogICAgZG9jLnNldFRleHRDb2xvciguLi5NSUQpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgIm5vcm1hbCIpOyBkb2Muc2V0Rm9udFNpemUoNi41KTsKICAgIGRvYy50ZXh0KCJuZXQgYW5udWFsIGNhc2ggc2F2aW5nIiwgeCArIDQsIHkgKyAyNSk7CiAgICAvLyBmdWxsIEtQSSBsaXN0IGJlbmVhdGggYSBzZXBhcmF0b3IgKG1pcnJvcnMgdGhlIEtQSSByb3csIHBlciBzY2VuYXJpbykKICAgIGRvYy5zZXREcmF3Q29sb3IoLi4uQk9SREVSKTsgZG9jLnNldExpbmVXaWR0aCgwLjIpOyBkb2MubGluZSh4ICsgNCwgeSArIDI3LjUsIHggKyBzVyAtIDQsIHkgKyAyNy41KTsKICAgIGNvbnN0IHBheWJrID0gbmV0ID4gMCAmJiBzLnJyLnBheWJhY2tNb250aHMgIT0gbnVsbCA\/IE1hdGgucm91bmQocy5yci5wYXliYWNrTW9udGhzICogMzY1IC8gMTIpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpICsgIiBkYXlzIiA6ICJuL2EiOwogICAgY29uc3QgcmV0ID0gbmV0ID4gMCAmJiBzLnJyLnJvaU11bHRpcGxlICE9IG51bGwgPyAoTWF0aC5yb3VuZChzLnJyLnJvaU11bHRpcGxlICogMTApIC8gMTApICsgIngiIDogIm4vYSI7CiAgICBjb25zdCBzdGF0cyA9IFsKICAgICAgWyJBZ2VuY3kgcHJlbWl1bSBhdm9pZGVkIiwgZm10SyhzLnJyLmFnZW5jeVNhdmluZyldLAogICAgICBbIkFkbWluIHRpbWUgdmFsdWUiLCBmbXRLKGFkbWluVmFsdWUpXSwKICAgICAgWyJQYXliYWNrIiwgcGF5YmtdLAogICAgICBbIlJldHVybiBvbiBsaWNlbmNlIGZlZSIsIHJldF0sCiAgICBdOwogICAgbGV0IHN5ID0geSArIDMxLjU7CiAgICBzdGF0cy5mb3JFYWNoKChbaywgdl0pID0+IHsKICAgICAgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJub3JtYWwiKTsgZG9jLnNldEZvbnRTaXplKDYuOCk7IGRvYy5zZXRUZXh0Q29sb3IoLi4uTUlEKTsKICAgICAgZG9jLnRleHQoaywgeCArIDQsIHN5KTsKICAgICAgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRUZXh0Q29sb3IoLi4uTkFWWSk7CiAgICAgIGRvYy50ZXh0KFN0cmluZyh2KSwgeCArIHNXIC0gNCwgc3ksIHsgYWxpZ246ICJyaWdodCIgfSk7CiAgICAgIHN5ICs9IDQuMTsKICAgIH0pOwogIH0pOwogIHkgKz0gc0ggKyA3OwoKICAvLyDilIDilIAgVHdvIGNvbHVtbnM6IFlvdXIgaW5wdXRzIHwgQ2FwYWNpdHkgYW5kIHdpZGVyIHZhbHVlIOKUgOKUgAogIGNvbnN0IGNvbFcgPSAoVyAtIDQpIC8gMiwgY29sSCA9IDQyOwogIGNvbnN0IGNvbEJveCA9ICh4LCB0aXRsZSwgcm93cywgbm90ZSkgPT4gewogICAgZG9jLnNldEZpbGxDb2xvciguLi5QQUxFKTsgZG9jLnNldERyYXdDb2xvciguLi5CT1JERVIpOwogICAgZG9jLnJvdW5kZWRSZWN0KHgsIHksIGNvbFcsIGNvbEgsIDIuNSwgMi41LCAiRkQiKTsKICAgIGRvYy5zZXRUZXh0Q29sb3IoLi4uTkFWWSk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiYm9sZCIpOyBkb2Muc2V0Rm9udFNpemUoOS41KTsKICAgIGRvYy50ZXh0KHRpdGxlLCB4ICsgNCwgeSArIDcpOwogICAgbGV0IHJ5ID0geSArIDEzOwogICAgZG9jLnNldEZvbnRTaXplKDgpOwogICAgcm93cy5mb3JFYWNoKChbaywgdl0pID0+IHsKICAgICAgZG9jLnNldFRleHRDb2xvciguLi5NSUQpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgIm5vcm1hbCIpOwogICAgICBkb2MudGV4dChrLCB4ICsgNCwgcnkpOwogICAgICBkb2Muc2V0VGV4dENvbG9yKC4uLlRFWFQpOyBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgImJvbGQiKTsKICAgICAgZG9jLnRleHQoU3RyaW5nKHYpLCB4ICsgY29sVyAtIDQsIHJ5LCB7IGFsaWduOiAicmlnaHQiIH0pOwogICAgICByeSArPSA1LjE7CiAgICB9KTsKICAgIC8vIEFuY2hvciB0aGUgbm90ZSBhIGZpeGVkIGRpc3RhbmNlIGFib3ZlIHRoZSBib3ggZmxvb3Igc28gaXQgYWx3YXlzIHNpdHMgaW5zaWRlLgogICAgaWYgKG5vdGUpIHsgZG9jLnNldFRleHRDb2xvciguLi5NVVRFRCk7IGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiaXRhbGljIik7IGRvYy5zZXRGb250U2l6ZSg2LjUpOyBkb2MudGV4dChub3RlLCB4ICsgNCwgeSArIGNvbEggLSAzLjUpOyB9CiAgfTsKICBjb2xCb3goTSwgIllvdXIgaW5wdXRzIiwgWwogICAgWyJSZWdpc3RlcmVkIGJhbmsgd29ya2VycyIsIGZtdE51bShjdHguYmFua1Bvb2wpXSwKICAgIFsiQ3VycmVudCBhZ2VuY3kgZmlsbCByYXRlIiwgY3R4LmFnZW5jeUZpbGxSYXRlICsgIiUiXSwKICAgIFsiVGVtcG9yYXJ5IHN0YWZmaW5nIHRlYW0iLCBmbXROdW0oY3R4Lm51bU1hbmFnZXJzKV0sCiAgICBbIkNvbmZpZGVuY2UgbGV2ZWwiLCBjdHguZGlzcGxhY2VtZW50ICsgIiUgKCIgKyBjdHguc3RhbmNlICsgIikiXSwKICAgIFsiQWRtaW4gdGltZSBpbiBjYXNoIHRvdGFsIiwgY3R4LmluY2x1ZGVBZG1pbiA\/ICJpbmNsdWRlZCIgOiAic2hvd24gc2VwYXJhdGVseSJdLAogIF0pOwogIGNvbEJveChNICsgY29sVyArIDQsICJDYXBhY2l0eSBhbmQgd2lkZXIgdmFsdWUiLCBbCiAgICBbIlNoaWZ0cyBtb3ZlZCB0byBiYW5rIC8geWVhciIsIGZtdE51bShyLmRpc3BsYWNlZCldLAogICAgWyJCYW5rIGJhY2tmaWxsIGNvc3QiLCBmbXQoTWF0aC5yb3VuZChyLmNhcGFjaXR5VmFsdWUpKV0sCiAgICBbIkFnZW5jeSByZWxpYW5jZSIsIChNYXRoLnJvdW5kKHIuZmlsbE5vdyAqIDEwKSAvIDEwKSArICIlIGRvd24gdG8gIiArIChNYXRoLnJvdW5kKHIuZmlsbEFmdGVyICogMTApIC8gMTApICsgIiUiXSwKICAgIFtjdHguYWdlbmN5U3BlbmQgIT0gbnVsbCA\/ICJZb3VyIGFubnVhbCBhZ2VuY3kgc3BlbmQgKGFuY2hvcikiIDogIkVzdC4gYW5udWFsIGFnZW5jeSBzcGVuZCAoYW5jaG9yKSIsIGZtdChyLmFnZW5jeVNwZW5kKV0sCiAgICBbIkJhbmtTdGFmZisgbGljZW5jZSBmZWUiLCBmbXQoci5wbGF0Zm9ybUNvc3QpICsgIi95ciJdLAogIF0sICJDYXBhY2l0eSBpcyBjb3ZlcmFnZSwgbm90IGNhc2gsIG5ldmVyIGFkZGVkIHRvIHRoZSBzYXZpbmcuIik7CiAgeSArPSBjb2xIICsgNTsKCiAgLy8g4pSA4pSAIEhvdyB0aGUgc2F2aW5nIGlzIHdvcmtlZCBvdXQg4pSA4pSACiAgZG9jLnNldEZpbGxDb2xvciguLi5QQUxFX1NFQSk7IGRvYy5zZXREcmF3Q29sb3IoLi4uVEVBTCk7CiAgZG9jLnJvdW5kZWRSZWN0KE0sIHksIFcsIDIyLCAyLjUsIDIuNSwgIkZEIik7CiAgZG9jLnNldFRleHRDb2xvciguLi5OQVZZKTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRGb250U2l6ZSg5LjUpOwogIGRvYy50ZXh0KCJIb3cgdGhlIGNhc2ggc2F2aW5nIGlzIHdvcmtlZCBvdXQiLCBNICsgNCwgeSArIDcpOwogIGRvYy5zZXRGb250U2l6ZSg4KTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJub3JtYWwiKTsgZG9jLnNldFRleHRDb2xvciguLi5NSUQpOwogIGNvbnN0IGdhcCA9IHIuYWdlbmN5U2hpZnRDb3N0IC0gci5iYW5rU2hpZnRDb3N0OwogIGRvYy50ZXh0KGBZb3VyIG93biBiYW5rICR7Zm10KE1hdGgucm91bmQoci5iYW5rU2hpZnRDb3N0KSl9L3NoaWZ0ICDCtyAgYWdlbmN5LCBzYW1lIHNoaWZ0ICR7Zm10KE1hdGgucm91bmQoci5hZ2VuY3lTaGlmdENvc3QpKX0vc2hpZnQgIMK3ICBwcmVtaXVtIGRpc3BsYWNlZCAke2ZtdChNYXRoLnJvdW5kKGdhcCkpfS9zaGlmdGAsIE0gKyA0LCB5ICsgMTIuNSk7CiAgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRUZXh0Q29sb3IoLi4uVEVBTCk7CiAgY29uc3QgYWRtaW5FcSA9IGN0eC5pbmNsdWRlQWRtaW4gJiYgci5hZG1pblNhdmluZyA+IDAgPyBgICsgJHtmbXQoTWF0aC5yb3VuZChyLmFkbWluU2F2aW5nKSl9IGFkbWluIHRpbWVgIDogIiI7CiAgZG9jLnRleHQoYCR7Zm10KE1hdGgucm91bmQoci5hZ2VuY3lTYXZpbmcpKX0gcHJlbWl1bSR7YWRtaW5FcX0gIC0gICR7Zm10KE1hdGgucm91bmQoci5wbGF0Zm9ybUNvc3QpKX0gbGljZW5jZSBmZWUgID0gICR7bm9OZXQgPyAiLSIgKyBmbXQoTWF0aC5hYnMoTWF0aC5yb3VuZChyLm5ldFNhdmluZykpKSA6IGZtdChNYXRoLnJvdW5kKHIubmV0U2F2aW5nKSl9IG5ldCBhIHllYXJgLCBNICsgNCwgeSArIDE4LjUpOwogIHkgKz0gMjIgKyA2OwoKICAvLyDilIDilIAgQWJvdXQgdGhlc2UgZmlndXJlcyAocGxhaW4tRW5nbGlzaCBleHBsYWluZXIpIOKUgOKUgAogIGRvYy5zZXREcmF3Q29sb3IoLi4uQk9SREVSKTsgZG9jLnNldExpbmVXaWR0aCgwLjIpOyBkb2MubGluZShNLCB5LCBNICsgVywgeSk7IHkgKz0gNTsKICBkb2Muc2V0VGV4dENvbG9yKC4uLk1VVEVEKTsgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRGb250U2l6ZSg4KTsKICBkb2MudGV4dCgiQUJPVVQgVEhFU0UgRklHVVJFUyIsIE0sIHkpOyB5ICs9IDU7CiAgY29uc3QgZXhwbGFpbiA9IFsKICAgIFsiQ2FzaCBzYXZpbmciLCAidGhlIGFnZW5jeSBwcmVtaXVtIGRpc3BsYWNlZCB3aGVuIGJldHRlciBiYW5rIHV0aWxpc2F0aW9uIG1vdmVzIGR1dGllcyBvZmYgYWdlbmN5IG9udG8geW91ciBvd24gYmFuay4gSXQgZXhjbHVkZXMgdGhlIGNvc3Qgb2YgdGhlIGJhbmsgc2hpZnRzIHRoZW1zZWx2ZXM7IHRoYXQgaXMgY2FwYWNpdHksIHNob3duIHNlcGFyYXRlbHksIGFuZCBuZXZlciBhZGRlZCB0byB0aGUgc2F2aW5nLiJdLAogICAgWyJBc3N1bXB0aW9ucyIsICJiYXNlZCBvbiAyMDI2LzI3IE5IUyBBZ2VuZGEgZm9yIENoYW5nZSBwYXkgbWlkcG9pbnRzIGFuZCBkZWxpYmVyYXRlbHkgY29uc2VydmF0aXZlIHRocm91Z2hvdXQuIFRoZSAyMCUgYWdlbmN5IHByZW1pdW0gcmVmbGVjdHMgZmlndXJlcyBjaXRlZCBpbiBIb3VzZSBvZiBDb21tb25zIExpYnJhcnkgcmVzZWFyY2guIl0sCiAgICBbIkFnZW5jeSBzcGVuZCIsIGN0eC5hZ2VuY3lTcGVuZCAhPSBudWxsCiAgICAgID8gIndhcyB0aGUgYW5udWFsIGFnZW5jeSBmaWd1cmUgeW91IHN1cHBsaWVkLCB3aGljaCBhbmNob3JzIHRoZSBjYXNoIHNhdmluZyBkaXJlY3RseS4iCiAgICAgIDogIndhcyBlc3RpbWF0ZWQgZnJvbSB5b3VyIGJhbmsgc2l6ZSB1c2luZyBGWTIwMjUvMjYgbmF0aW9uYWwgYXZlcmFnZXMgKH7CozIsNzAwIHBlciByZWdpc3RlcmVkIGJhbmsgd29ya2VyKTsgYSBmaWd1cmUgYmFzZWQgb24geW91ciBvd24gYWdlbmN5IGJvb2sgd291bGQgZ2l2ZSBhIG1vcmUgYWNjdXJhdGUgcmVzdWx0LiJdLAogIF07CiAgZG9jLnNldEZvbnRTaXplKDcuNSk7CiAgZXhwbGFpbi5mb3JFYWNoKChbdGVybSwgZGVmXSkgPT4gewogICAgY29uc3QgbGFiZWwgPSB0ZXJtICsgIjogIjsKICAgIGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAiYm9sZCIpOyBkb2Muc2V0VGV4dENvbG9yKC4uLk5BVlkpOwogICAgZG9jLnRleHQobGFiZWwsIE0sIHkpOwogICAgY29uc3QgbHcgPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsKTsKICAgIGRvYy5zZXRGb250KCJoZWx2ZXRpY2EiLCAibm9ybWFsIik7IGRvYy5zZXRUZXh0Q29sb3IoLi4uTUlEKTsKICAgIGNvbnN0IGxpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkZWYsIFcgLSBsdyk7CiAgICBkb2MudGV4dChsaW5lcywgTSArIGx3LCB5KTsKICAgIHkgKz0gbGluZXMubGVuZ3RoICogMy4zICsgMS4zOwogIH0pOwogIHkgKz0gMjsKCiAgLy8g4pSA4pSAIExlZ2FsIGRpc2NsYWltZXIgKHNlcGFyYXRlZCkg4pSA4pSACiAgZG9jLnNldERyYXdDb2xvciguLi5CT1JERVIpOyBkb2Muc2V0TGluZVdpZHRoKDAuMik7IGRvYy5saW5lKE0sIHksIE0gKyBXLCB5KTsgeSArPSA0LjU7CiAgZG9jLnNldEZvbnQoImhlbHZldGljYSIsICJib2xkIik7IGRvYy5zZXRGb250U2l6ZSg2LjgpOyBkb2Muc2V0VGV4dENvbG9yKC4uLk1VVEVEKTsKICBkb2MudGV4dCgiRElTQ0xBSU1FUiIsIE0sIHkpOyB5ICs9IDMuNjsKICBkb2Muc2V0Rm9udCgiaGVsdmV0aWNhIiwgIml0YWxpYyIpOyBkb2Muc2V0Rm9udFNpemUoNi44KTsgZG9jLnNldFRleHRDb2xvciguLi5NVVRFRCk7CiAgZG9jLnRleHQoZG9jLnNwbGl0VGV4dFRvU2l6ZSgiSW5kaWNhdGl2ZSBvbmx5LCBub3QgYSBxdW90ZSBvciBhIGd1YXJhbnRlZS4gUGlsb3Qtc3R1ZHkgZmlndXJlcyBhcmUgZnJvbSB0d28gc2l0ZXMgd2l0aGluIGEgZm91ci10cnVzdCBwcm9ncmFtbWUsIGFub255bWlzZWQgcGVuZGluZyBjbGllbnQgc2lnbi1vZmYsIGFuZCBhcmUgbm90IHNvbGVseSBhdHRyaWJ1dGFibGUgdG8gdGhlIHBsYXRmb3JtLiBWYWxpZGF0ZSBhZ2FpbnN0IHlvdXIgb3JnYW5pc2F0aW9uJ3Mgb3duIGJhbmsgYW5kIGFnZW5jeSByYXRlcyBiZWZvcmUgdXNlIGluIGEgYnVzaW5lc3MgY2FzZS4iLCBXKSwgTSwgeSk7CgogIGNvbnN0IG9yZ1NsdWcgPSBsZWFkLm9yZyA\/ICItIiArIGxlYWQub3JnLnRyaW0oKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICItIikucmVwbGFjZSgvXi18LSQvZywgIiIpIDogIiI7CiAgZG9jLnNhdmUoInNtYXJ0LW1hdGNoLXJvaS1lc3RpbWF0ZSIgKyBvcmdTbHVnICsgIi5wZGYiKTsKfQoKLyogVGhlIGNhbGN1bGF0b3IgY29udGV4dCB0aGF0IHRyYXZlbHMgd2l0aCBldmVyeSBzdWJtaXNzaW9uICh0aGUgYG1lc3NhZ2VgCiAgIGZpZWxkKSwgc28gZWFjaCBsZWFkIGlzIHNlbGYtZGVzY3JpYmluZyBpbiBIdWJTcG90LiBCdWlsdCBhdCBzdWJtaXQgdGltZSwKICAgbmV2ZXIgcmVuZGVyIHRpbWU6IHRoZSB2aXNpdG9yIGNhbiBtb3ZlIHRoZSBjb25maWRlbmNlIHNsaWRlciBhZnRlciB0aGUKICAgZm9ybSBpcyBvbiBzY3JlZW4sIGFuZCB0aGUgbGVhZCBtdXN0IGNhcnJ5IHRoZSBmaWd1cmVzIHRoZXkgc3VibWl0dGVkIG9uLiAqLwpmdW5jdGlvbiBidWlsZENvbnRleHRNZXNzYWdlKHIsIGxlYWRDb250ZXh0KSB7CiAgLy8gVGhlIGhvc3QgcGFnZSAod2hlbiBlbWJlZGRlZCkgcmlkZXMgYWxvbmcgc28gdGhlIHdpZGdldCByb3V0ZSwgd2hvc2Ugb3duCiAgLy8gcGFnZSBhdHRyaWJ1dGlvbiBzZWVzIG9ubHkgdGhlIGlmcmFtZSdzIG9yaWdpbiwgc3RpbGwgbmFtZXMgdGhlIHJlYWwgcGFnZS4KICBjb25zdCBwYWdlID0gaG9zdFBhZ2VIcmVmID8gYCB8IFBhZ2U6ICR7aG9zdFBhZ2VIcmVmfWAgOiAiIjsKICByZXR1cm4gYFNtYXJ0IE1hdGNoIFJPSSAod2ViKSBzdWJtaXNzaW9uIHwgQmFuayB3b3JrZXJzOiAke2ZtdE51bShsZWFkQ29udGV4dC5iYW5rUG9vbCl9IHwgQWdlbmN5IGZpbGw6ICR7bGVhZENvbnRleHQuYWdlbmN5RmlsbFJhdGV9JSB8IFRlYW06ICR7bGVhZENvbnRleHQubnVtTWFuYWdlcnN9IHwgQ29uZmlkZW5jZTogJHtsZWFkQ29udGV4dC5kaXNwbGFjZW1lbnR9JSAoJHtsZWFkQ29udGV4dC5zdGFuY2V9KSB8IE5ldCBhbm51YWwgc2F2aW5nOiAke2ZtdEsoci5uZXRTYXZpbmcpfSB8IEhvdXJzL3dlZWsgcmVsZWFzZWQ6ICR7Zm10TnVtKHIudGltZVNhdmVkV2Vlayl9IHwgRXN0LiBhZ2VuY3kgc3BlbmQ6ICR7Zm10SyhyLmFnZW5jeVNwZW5kKX0ke3BhZ2V9YDsKfQoKLyogUERGICsgbG9jYWwgYmFja3VwLCBzaGFyZWQgYnkgYm90aCBzdWJtaXNzaW9uIHJvdXRlcy4gVGhlIGVtYmVkZGVkLXdpZGdldAogICByb3V0ZSBjYWxscyB0aGlzIGFsb25lIChIdWJTcG90IGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdWJtaXNzaW9uIGZyb20KICAgaXRzIG93biB3aWRnZXQpOyB0aGUgZmFsbGJhY2sgcm91dGUgZm9sbG93cyBpdCB3aXRoIHRoZSBGb3JtcyBBUEkgUE9TVC4gKi8KYXN5bmMgZnVuY3Rpb24gcmVjb3JkQW5kUmVwb3J0KHIsIGxlYWQsIGxlYWRDb250ZXh0KSB7CiAgdHJ5IHsgYXdhaXQgZ2VuZXJhdGVQREYociwgbGVhZCwgbGVhZENvbnRleHQpOyB9IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybigiUERGIGZhaWxlZDoiLCBlKTsgfQogIHNhdmVTdWJtaXNzaW9uKHsKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAogICAgbGVhZDogeyBuYW1lOiBsZWFkLm5hbWUsIGVtYWlsOiBsZWFkLmVtYWlsLCBvcmc6IGxlYWQub3JnLCByb2xlOiBsZWFkLnJvbGUgfSwKICAgIGlucHV0czogeyAuLi5sZWFkQ29udGV4dCB9LAogICAgcmVzdWx0czogewogICAgICBuZXRTYXZpbmc6IHIubmV0U2F2aW5nLCBhZ2VuY3lTYXZpbmc6IHIuYWdlbmN5U2F2aW5nLCBhZG1pblNhdmluZzogci5hZG1pblNhdmluZywKICAgICAgdGltZVNhdmVkV2Vlazogci50aW1lU2F2ZWRXZWVrLCBkaXNwbGFjZWQ6IHIuZGlzcGxhY2VkLAogICAgICBhZ2VuY3lTcGVuZDogci5hZ2VuY3lTcGVuZCwgcGxhdGZvcm1Db3N0OiByLnBsYXRmb3JtQ29zdCwKICAgICAgcm9pTXVsdGlwbGU6IHIucm9pTXVsdGlwbGUsIHBheWJhY2tNb250aHM6IHIucGF5YmFja01vbnRocywKICAgIH0sCiAgfSk7Cn0KCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBIVUJTUE9UIEVNQkVEREVEIEZPUk0gKGhic3B0LmZvcm1zLmNyZWF0ZSksIHRoZSBpbnRlZ3JhdGlvbiBzdHlsZSB0aGUKICAgY2xpZW50J3MgbWFya2V0aW5nIHRlYW0gdXNlcyBldmVyeXdoZXJlIGVsc2Ugb24gdGhlaXIgc2l0ZS4KCiAgIFRoZSBjYWxjdWxhdG9yIHRyaWVzIHRoaXMgRklSU1Q6IGl0IGxvYWRzIEh1YlNwb3QncyBlbWJlZCBzY3JpcHQgYW5kCiAgIHJlbmRlcnMgdGhlIGNsaWVudCdzIGFjdHVhbCBIdWJTcG90IGZvcm0gKHNhbWUgcG9ydGFsLCBzYW1lIGZvcm0gR1VJRCBhcwogICB0aGUgQVBJIHJvdXRlKSBpbnNpZGUgdGhlIGxlYWQgY2FyZC4gSWYgdGhlIHNjcmlwdCBjYW5ub3QgbG9hZCBvciB0aGUKICAgd2lkZ2V0IGRvZXMgbm90IHJlbmRlciDigJQgYWQtYmxvY2tlcnMgYmxvY2sganMtZXUxLmhzZm9ybXMubmV0IHJvdXRpbmVseSwKICAgYW5kIGEgc3RyaWN0IGhvc3QtcGFnZSBDU1AgY2FuIHRvbyDigJQgdGhlIGNhbGN1bGF0b3IgZmFsbHMgYmFjayB0byBpdHMgb3duCiAgIHN0eWxlZCBmb3JtIHBvc3RpbmcgdG8gdGhlIEZvcm1zIEFQSS4gQm90aCByb3V0ZXMgbGFuZCBzdWJtaXNzaW9ucyBpbiB0aGUKICAgaWRlbnRpY2FsIEh1YlNwb3QgZm9ybSwgc28gbm8gbGVhZCBpcyBsb3N0IGVpdGhlciB3YXkuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwpjb25zdCBIVUJTUE9UX0VNQkVEX1NSQyA9ICJodHRwczovL2pzLWV1MS5oc2Zvcm1zLm5ldC9mb3Jtcy9lbWJlZC92Mi5qcyI7CgpsZXQgZW1iZWRTY3JpcHRQcm9taXNlID0gbnVsbDsKZnVuY3Rpb24gbG9hZEh1YlNwb3RFbWJlZCh0aW1lb3V0TXMgPSA4MDAwKSB7CiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7CiAgaWYgKHdpbmRvdy5oYnNwdCAmJiB3aW5kb3cuaGJzcHQuZm9ybXMpIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lmhic3B0KTsKICBpZiAoIWVtYmVkU2NyaXB0UHJvbWlzZSkgewogICAgZW1iZWRTY3JpcHRQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CiAgICAgIGNvbnN0IGRvbmUgPSB2ID0+IHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgcmVzb2x2ZSh2KTsgfTsKICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGRvbmUobnVsbCksIHRpbWVvdXRNcyk7CiAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgcy5zcmMgPSBIVUJTUE9UX0VNQkVEX1NSQzsgcy5hc3luYyA9IHRydWU7IHMuY2hhcnNldCA9ICJ1dGYtOCI7CiAgICAgIHMub25sb2FkID0gKCkgPT4gZG9uZSh3aW5kb3cuaGJzcHQgJiYgd2luZG93Lmhic3B0LmZvcm1zID8gd2luZG93Lmhic3B0IDogbnVsbCk7CiAgICAgIHMub25lcnJvciA9ICgpID0+IGRvbmUobnVsbCk7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocyk7CiAgICB9KTsKICB9CiAgcmV0dXJuIGVtYmVkU2NyaXB0UHJvbWlzZTsKfQoKLyogSHViU3BvdCdzIHYyIGVtYmVkIHJlbmRlcnMgdGhlIGZvcm0gZWl0aGVyIGlubGluZSBvciBpbnNpZGUgYSBTQU1FLU9SSUdJTgogICBpZnJhbWUgaXQgd3JpdGVzIGl0c2VsZiwgc28gdGhlIHBhcmVudCBwYWdlIGNhbiByZWFjaCB0aGUgZmllbGRzLiBSZXNvbHZlCiAgIHRoZSBkb2N1bWVudCB0aGF0IGFjdHVhbGx5IGhvbGRzIHRoZSBmb3JtLCB3aGVyZXZlciBpdCByZW5kZXJlZC4gKi8KZnVuY3Rpb24gZW1iZWRkZWRGb3JtRG9jKGNvbnRhaW5lcikgewogIHRyeSB7CiAgICBjb25zdCBmcmFtZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCJpZnJhbWUiKTsKICAgIHJldHVybiAoZnJhbWUgJiYgZnJhbWUuY29udGVudERvY3VtZW50KSB8fCBjb250YWluZXIub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKICB9IGNhdGNoIChlKSB7IHJldHVybiBjb250YWluZXIub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsgfQp9CmZ1bmN0aW9uIGVtYmVkZGVkRm9ybUVsKGNvbnRhaW5lcikgewogIHRyeSB7CiAgICBjb25zdCBkb2MgPSBlbWJlZGRlZEZvcm1Eb2MoY29udGFpbmVyKTsKICAgIHJldHVybiBkb2MucXVlcnlTZWxlY3RvcigiZm9ybS5ocy1mb3JtLCBmb3JtW2RhdGEtZm9ybS1pZF0sIGZvcm0iKTsKICB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9Cn0KZnVuY3Rpb24gc2V0RW1iZWRkZWRGaWVsZChjb250YWluZXIsIG5hbWUsIHZhbHVlKSB7CiAgdHJ5IHsKICAgIGNvbnN0IGZvcm0gPSBlbWJlZGRlZEZvcm1FbChjb250YWluZXIpOwogICAgY29uc3QgZmllbGQgPSBmb3JtICYmIGZvcm0ucXVlcnlTZWxlY3RvcihgW25hbWU9IiR7bmFtZX0iXWApOwogICAgaWYgKCFmaWVsZCkgcmV0dXJuIGZhbHNlOwogICAgZmllbGQudmFsdWUgPSB2YWx1ZTsKICAgIGZpZWxkLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7CiAgICBmaWVsZC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2hhbmdlIiwgeyBidWJibGVzOiB0cnVlIH0pKTsKICAgIHJldHVybiB0cnVlOwogIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9Cn0KZnVuY3Rpb24gcmVhZEVtYmVkZGVkRmllbGRzKGNvbnRhaW5lcikgewogIGNvbnN0IG91dCA9IHt9OwogIHRyeSB7CiAgICBjb25zdCBmb3JtID0gZW1iZWRkZWRGb3JtRWwoY29udGFpbmVyKTsKICAgIGlmIChmb3JtKSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWVdLCBzZWxlY3RbbmFtZV0sIHRleHRhcmVhW25hbWVdIikuZm9yRWFjaChmID0+IHsKICAgICAgaWYgKGYudHlwZSA9PT0gImNoZWNrYm94IiB8fCBmLnR5cGUgPT09ICJyYWRpbyIpIHsgaWYgKGYuY2hlY2tlZCkgb3V0W2YubmFtZV0gPSBmLnZhbHVlOyB9CiAgICAgIGVsc2Ugb3V0W2YubmFtZV0gPSBmLnZhbHVlOwogICAgfSk7CiAgfSBjYXRjaCAoZSkgeyAvKiBjcm9zcy1vcmlnaW4gb3IgZGV0YWNoZWQ6IHN1Ym1pc3Npb25WYWx1ZXMgY292ZXJzIGl0ICovIH0KICByZXR1cm4gb3V0Owp9CgovKiDilIDilIAgU3R5bGluZyB0aGUgZW1iZWRkZWQgZm9ybSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgT24gdGhlIGNsaWVudCdzIG93biBzaXRlIEh1YlNwb3QgZm9ybXMgYXJlIHN0eWxlZCBieSB0aGUgU0lURSdzCiAgIHN0eWxlc2hlZXQsIGJ1dCBpbnNpZGUgdGhlIGNhbGN1bGF0b3IncyBpZnJhbWUgdGhhdCBzdHlsZXNoZWV0IGNhbm5vdAogICByZWFjaCwgYW5kIGEgZm9ybSBzZXQgdG8gInJhdyBIVE1MIiBtb2RlIGluIEh1YlNwb3QgYXJyaXZlcyB3aXRoIG5vIENTUwogICBhdCBhbGw6IGJhcmUgYnJvd3NlciBpbnB1dHMgYW5kIGEgZ3JleSBTdWJtaXQgYnV0dG9uLiBTbyB0aGUgY2FsY3VsYXRvcgogICBzdHlsZXMgdGhlIHdpZGdldCBpdHNlbGYsIGluIGl0cyBvd24gZGVzaWduIHN5c3RlbSwgYW5kIHRoZSBmb3JtIGxvb2tzCiAgIHJpZ2h0IHJlZ2FyZGxlc3Mgb2YgaG93IGl0IGlzIGNvbmZpZ3VyZWQgaW4gSHViU3BvdCBvciB3aGVyZSB0aGUKICAgY2FsY3VsYXRvciBpcyBlbWJlZGRlZC4gKi8KZnVuY3Rpb24gZW1iZWRkZWRGb3JtQ1NTKHApIHsKICByZXR1cm4gYAoke3B9LmhzLWZvcm0sICR7cH0uaHMtZm9ybSAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoke3B9LmhzLWZvcm0geyBmb250LWZhbWlseTogJ0RNIFNhbnMnLCAnRE0gU2FucyBWYXJpYWJsZScsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOyBjb2xvcjogIzBGNDE0NjsgfQoke3B9LmhzLWZvcm0gZmllbGRzZXQgeyBtYXgtd2lkdGg6IG5vbmU7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyB9CiR7cH0uaHMtZm9ybSAuaHMtZm9ybS1maWVsZCB7IG1hcmdpbi1ib3R0b206IDE0cHg7IH0KJHtwfS5ocy1mb3JtIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogMC45cmVtOyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzNENUE1RTsgbWFyZ2luLWJvdHRvbTogNnB4OyB9CiR7cH0uaHMtZm9ybSAuaW5wdXQgeyBtYXJnaW46IDAgIWltcG9ydGFudDsgfQoke3B9LmhzLWZvcm0gaW5wdXQuaHMtaW5wdXQsICR7cH0uaHMtZm9ybSBzZWxlY3QuaHMtaW5wdXQsICR7cH0uaHMtZm9ybSB0ZXh0YXJlYS5ocy1pbnB1dCB7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZzogMTFweCAxNHB4OyBib3JkZXI6IDFweCBzb2xpZCAjRDRFMEREOyBib3JkZXItcmFkaXVzOiAxMHB4OwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OyBmb250LXNpemU6IDAuOTVyZW07IGNvbG9yOiAjMEY0MTQ2OyBiYWNrZ3JvdW5kOiAjZmZmOyBhcHBlYXJhbmNlOiBhdXRvOwp9CiR7cH0uaHMtZm9ybSBpbnB1dC5ocy1pbnB1dDpmb2N1cywgJHtwfS5ocy1mb3JtIHNlbGVjdC5ocy1pbnB1dDpmb2N1cywgJHtwfS5ocy1mb3JtIHRleHRhcmVhLmhzLWlucHV0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6ICMxQThBN0E7IGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDI2LCAxMzgsIDEyMiwgMC4xNSk7Cn0KJHtwfS5ocy1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9ImNoZWNrYm94Il0sICR7cH0uaHMtZm9ybSBpbnB1dC5ocy1pbnB1dFt0eXBlPSJyYWRpbyJdIHsgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgYWNjZW50LWNvbG9yOiAjMEY0MTQ2OyB9CiR7cH0uaHMtZm9ybSB1bC5pbnB1dHMtbGlzdCwgJHtwfS5ocy1mb3JtIHVsLmhzLWVycm9yLW1zZ3MgeyBsaXN0LXN0eWxlOiBub25lOyBtYXJnaW46IDRweCAwIDA7IHBhZGRpbmc6IDA7IH0KJHtwfS5ocy1mb3JtIC5ocy1lcnJvci1tc2csICR7cH0uaHMtZm9ybSAuaHMtZXJyb3ItbXNncyBsYWJlbCB7IGNvbG9yOiAjQjQyMzE4OyBmb250LXNpemU6IDAuNzhyZW07IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbjogNHB4IDAgMDsgfQoke3B9LmhzLWZvcm0gLmhzX2Vycm9yX3JvbGx1cCB7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0KJHtwfS5ocy1mb3JtIC5ocy1yaWNodGV4dCwgJHtwfS5ocy1mb3JtIC5sZWdhbC1jb25zZW50LWNvbnRhaW5lciwgJHtwfS5ocy1mb3JtIC5sZWdhbC1jb25zZW50LWNvbnRhaW5lciBwIHsKICBmb250LXNpemU6IDAuNzhyZW07IGNvbG9yOiAjNUY3ODdDOyBsaW5lLWhlaWdodDogMS41OyBtYXJnaW46IDAgMCAxMHB4Owp9CiR7cH0uaHMtZm9ybSAuaHNfc3VibWl0IHsgbWFyZ2luLXRvcDogNHB4OyB9CiR7cH0uaHMtZm9ybSBpbnB1dC5ocy1idXR0b24sICR7cH0uaHMtZm9ybSAuaHMtYnV0dG9uIHsKICB3aWR0aDogYXV0bzsgYmFja2dyb3VuZDogIzBGNDE0NjsgY29sb3I6ICNmZmY7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgcGFkZGluZzogMTNweCAzMnB4OyBmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiAxcmVtOyBmb250LXdlaWdodDogODAwOyBjdXJzb3I6IHBvaW50ZXI7Cn0KJHtwfS5ocy1mb3JtIGlucHV0LmhzLWJ1dHRvbjpob3ZlciwgJHtwfS5ocy1mb3JtIC5ocy1idXR0b246aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMUE1NDU5OyB9CiR7cH0uc3VibWl0dGVkLW1lc3NhZ2UgeyBmb250LWZhbWlseTogJ0RNIFNhbnMnLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMC45NXJlbTsgY29sb3I6ICMwRjQxNDY7IGxpbmUtaGVpZ2h0OiAxLjY7IH0KYDsKfQoKZnVuY3Rpb24gc3R5bGVFbWJlZGRlZEZvcm0oY29udGFpbmVyKSB7CiAgdHJ5IHsKICAgIGNvbnN0IGRvYyA9IGVtYmVkZGVkRm9ybURvYyhjb250YWluZXIpOwogICAgY29uc3Qgb3duRG9jID0gY29udGFpbmVyLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7CiAgICBjb25zdCBpbklmcmFtZSA9IGRvYyAhPT0gb3duRG9jOwogICAgY29uc3QgU1RZTEVfSUQgPSAic21hcnRtYXRjaC1ocy1mb3JtLXN0eWxlIjsKICAgIGlmICghKGluSWZyYW1lID8gZG9jLmdldEVsZW1lbnRCeUlkKFNUWUxFX0lEKSA6IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjIiArIFNUWUxFX0lEKSkpIHsKICAgICAgY29uc3Qgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgc3R5bGUuaWQgPSBTVFlMRV9JRDsKICAgICAgLy8gSW5zaWRlIEh1YlNwb3QncyBvd24gc2FtZS1vcmlnaW4gaWZyYW1lIHRoZSBzZWxlY3RvcnMgc3RhbmQgYWxvbmUgKGFuZAogICAgICAvLyB0aGUgY2FsY3VsYXRvcidzIGZvbnQgaXMgbm90IGxvYWRlZCB0aGVyZSwgc28gZmV0Y2ggaXQsIHdpdGggdGhlIHN0YWNrCiAgICAgIC8vIGZhbGxpbmcgYmFjayB0byBzeXN0ZW0gZm9udHMgaWYgdGhhdCBob3N0IGlzIGJsb2NrZWQpLiBSZW5kZXJlZCBpbmxpbmUsCiAgICAgIC8vIHRoZXkgYXJlIHNjb3BlZCB1bmRlciB0aGUgd2lkZ2V0IGNvbnRhaW5lciBzbyBub3RoaW5nIGxlYWtzLgogICAgICBzdHlsZS50ZXh0Q29udGVudCA9IChpbklmcmFtZSA\/ICJAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1ETStTYW5zOm9wc3osd2dodEA5Li40MCw0MDA7OS4uNDAsNTAwOzkuLjQwLDYwMDs5Li40MCw3MDAmZGlzcGxheT1zd2FwJyk7XG5ib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9XG4iIDogIiIpCiAgICAgICAgKyBlbWJlZGRlZEZvcm1DU1MoaW5JZnJhbWUgPyAiIiA6IGAjJHtjb250YWluZXIuaWQgfHwgInNtYXJ0bWF0Y2gtaHMtZm9ybSJ9IGApOwogICAgICAoaW5JZnJhbWUgPyAoZG9jLmhlYWQgfHwgZG9jLmRvY3VtZW50RWxlbWVudCkgOiBjb250YWluZXIpLmFwcGVuZENoaWxkKHN0eWxlKTsKICAgIH0KICAgIC8vIENvbGxhcHNlIHRoZSBlbXB0eSB3cmFwcGVycyBIdWJTcG90IHJlbmRlcnMgYXJvdW5kIGhpZGRlbiBmaWVsZHMgKHRoZQogICAgLy8gaGlkZGVuIGNhbGN1bGF0b3ItY29udGV4dCBmaWVsZCBvdGhlcndpc2UgbGVhdmVzIGEgYmxhbmsgZ2FwIGF0IHRoZSB0b3ApLgogICAgY29uc3QgZm9ybSA9IGVtYmVkZGVkRm9ybUVsKGNvbnRhaW5lcik7CiAgICBpZiAoZm9ybSkgZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWhpZGRlbl0iKS5mb3JFYWNoKGYgPT4gewogICAgICBjb25zdCB3cmFwID0gZi5jbG9zZXN0KCIuaHMtZm9ybS1maWVsZCIpOwogICAgICBpZiAod3JhcCAmJiAhd3JhcC5xdWVyeVNlbGVjdG9yKCJpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSksIHNlbGVjdCwgdGV4dGFyZWEiKSkgd3JhcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgfSk7CiAgfSBjYXRjaCAoZSkgeyAvKiBzdHlsaW5nIGlzIGJlc3QtZWZmb3J0OyB0aGUgZm9ybSBzdGlsbCB3b3JrcyB1bnN0eWxlZCAqLyB9Cn0KCi8qIFJlbmRlciB0aGUgY2xpZW50J3MgSHViU3BvdCBmb3JtIGludG8gYGNvbnRhaW5lcmAuCiAgIC0gZ2V0TWVzc2FnZSgpOiBjYWxsZWQgYXQgZm9ybS1yZWFkeSBBTkQgYWdhaW4ganVzdCBiZWZvcmUgc3VibWlzc2lvbiwgc28KICAgICB0aGUgaGlkZGVuIGNvbnRleHQgZmllbGQgYWx3YXlzIGNhcnJpZXMgdGhlIGZpZ3VyZXMgb24gc2NyZWVuLiBUaGUgZm9ybQogICAgIG5lZWRzIGEgKGhpZGRlbikgZmllbGQgbmFtZWQgIm1lc3NhZ2UiIGZvciB0aGlzOyB3aXRob3V0IG9uZSB0aGUgcHJlZmlsbAogICAgIGlzIGEgc2lsZW50IG5vLW9wIGFuZCB0aGUgbGVhZCBzaW1wbHkgYXJyaXZlcyB3aXRob3V0IGNhbGN1bGF0b3IgY29udGV4dC4KICAgLSBvblN1Ym1pdHRlZChsZWFkKTogZmlyZXMgYWZ0ZXIgSHViU3BvdCBhY2NlcHRzIHRoZSBzdWJtaXNzaW9uLCB3aXRoIHRoZQogICAgIHZpc2l0b3IncyBkZXRhaWxzIHJlY292ZXJlZCBmcm9tIHRoZSB3aWRnZXQsIGZvciB0aGUgUERGICsgbG9jYWwgYmFja3VwLgogICBSZXNvbHZlcyB0cnVlIG9ubHkgb25jZSB0aGUgd2lkZ2V0IGhhcyBWSVNJQkxZIHJlbmRlcmVkIChzY3JpcHQgbG9hZGluZyBpcwogICBub3QgZW5vdWdoOiBhIGJhZCBHVUlEIG9yIGJsb2NrZWQgZGVmaW5pdGlvbiBmZXRjaCByZW5kZXJzIG5vdGhpbmcpLCBzbyB0aGUKICAgY2FsbGVyIGNhbiBrZWVwIGl0cyBvd24gZm9ybSB3aGVuIGFueXRoaW5nIGluIHRoZSBjaGFpbiBmYWlscy4gKi8KYXN5bmMgZnVuY3Rpb24gY3JlYXRlRW1iZWRkZWRMZWFkRm9ybSh7IGNvbnRhaW5lciwgZ2V0TWVzc2FnZSwgb25TdWJtaXR0ZWQgfSkgewogIGNvbnN0IGhic3B0ID0gYXdhaXQgbG9hZEh1YlNwb3RFbWJlZCgpOwogIGlmICghaGJzcHQpIHJldHVybiBmYWxzZTsKICBsZXQgY2FwdHVyZWQgPSB7fTsKICB0cnkgewogICAgaGJzcHQuZm9ybXMuY3JlYXRlKHsKICAgICAgcG9ydGFsSWQ6IEhVQlNQT1RfUE9SVEFMX0lELAogICAgICBmb3JtSWQ6IEhVQlNQT1RfRk9STV9HVUlELAogICAgICByZWdpb246IEhVQlNQT1RfUkVHSU9OLAogICAgICB0YXJnZXQ6IGNvbnRhaW5lci5pZCA\/ICIjIiArIGNvbnRhaW5lci5pZCA6IGNvbnRhaW5lciwKICAgICAgb25Gb3JtUmVhZHk6ICgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgc3R5bGVFbWJlZGRlZEZvcm0oY29udGFpbmVyKTsKICAgICAgICAgIHNldEVtYmVkZGVkRmllbGQoY29udGFpbmVyLCAibWVzc2FnZSIsIGdldE1lc3NhZ2UoKSk7CiAgICAgICAgICBjb25zdCBmb3JtID0gZW1iZWRkZWRGb3JtRWwoY29udGFpbmVyKTsKICAgICAgICAgIC8vIENhcHR1cmUtcGhhc2UgbGlzdGVuZXI6IHJlZnJlc2ggdGhlIGNvbnRleHQgYW5kIHNuYXBzaG90IHRoZQogICAgICAgICAgLy8gdmlzaXRvcidzIGFuc3dlcnMgYXQgdGhlIG1vbWVudCB0aGV5IHByZXNzIHRoZSB3aWRnZXQncyBzdWJtaXQuCiAgICAgICAgICBpZiAoZm9ybSkgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCAoKSA9PiB7CiAgICAgICAgICAgIHNldEVtYmVkZGVkRmllbGQoY29udGFpbmVyLCAibWVzc2FnZSIsIGdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIGNhcHR1cmVkID0gcmVhZEVtYmVkZGVkRmllbGRzKGNvbnRhaW5lcik7CiAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9IGNhdGNoIChlKSB7IC8qIHByZWZpbGwgaXMgYmVzdC1lZmZvcnQgKi8gfQogICAgICB9LAogICAgICBvbkZvcm1TdWJtaXR0ZWQ6IChfZiwgZGF0YSkgPT4gewogICAgICAgIGNvbnN0IHYgPSAoZGF0YSAmJiBkYXRhLnN1Ym1pc3Npb25WYWx1ZXMpIHx8IGNhcHR1cmVkIHx8IHt9OwogICAgICAgIG9uU3VibWl0dGVkKHsKICAgICAgICAgIG5hbWU6IFt2LmZpcnN0bmFtZSwgdi5sYXN0bmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSwKICAgICAgICAgIGVtYWlsOiB2LmVtYWlsIHx8ICIiLAogICAgICAgICAgb3JnOiB2LmNvbXBhbnkgfHwgIiIsCiAgICAgICAgICByb2xlOiB2LmpvYnRpdGxlIHx8ICIiLAogICAgICAgIH0pOwogICAgICB9LAogICAgfSk7CiAgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0KICAvLyBXYWl0IGZvciB0aGUgd2lkZ2V0IHRvIGFjdHVhbGx5IGFwcGVhciAoaWZyYW1lIG9yIGZvcm0pIGJlZm9yZSBkZWNsYXJpbmcgc3VjY2Vzcy4KICBmb3IgKGxldCB3YWl0ZWQgPSAwOyB3YWl0ZWQgPCA2MDAwOyB3YWl0ZWQgKz0gMjAwKSB7CiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gc2V0VGltZW91dChyZXMsIDIwMCkpOwogICAgaWYgKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCJpZnJhbWUsIGZvcm0iKSkgewogICAgICAvLyBBZ2FpbiBoZXJlOiB3aGVuIEh1YlNwb3QgcmVuZGVycyBpbnRvIGl0cyBvd24gaWZyYW1lLCB0aGF0IGRvY3VtZW50CiAgICAgIC8vIG1heSBub3QgZXhpc3QgeWV0IGF0IG9uRm9ybVJlYWR5IHRpbWUuCiAgICAgIHN0eWxlRW1iZWRkZWRGb3JtKGNvbnRhaW5lcik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8qIFRoZSB3aG9sZSBzdWJtaXNzaW9uLCBpbiB0aGUgb3JkZXIgdGhhdCBtYXR0ZXJzOgogICAgIDEuIHRoZSB2aXNpdG9yJ3MgUERGICh0aGUgdmFsdWUgZXhjaGFuZ2UsIG5ldmVyIGJsb2NrZWQgb24gdGhlIG5ldHdvcmspLAogICAgIDIuIHRoZSBsb2NhbCBiYWNrdXAgKHNvIGEgbGVhZCBzdXJ2aXZlcyBhIGJsb2NrZWQgbmV0d29yayksCiAgICAgMy4gSHViU3BvdCwgd2l0aCB0aGUgcmVzcG9uc2UgY2hlY2tlZC4KICAgTmV2ZXIgdGhyb3dzOiBhIGZhaWx1cmUgYXQgYW55IHN0YWdlIG11c3Qgbm90IGNvc3QgdGhlIHZpc2l0b3IgdGhlaXIgcmVwb3J0LiAqLwphc3luYyBmdW5jdGlvbiBzdWJtaXRMZWFkKHIsIGxlYWQsIGxlYWRDb250ZXh0KSB7CiAgYXdhaXQgcmVjb3JkQW5kUmVwb3J0KHIsIGxlYWQsIGxlYWRDb250ZXh0KTsKCiAgaWYgKCFIVUJTUE9UX1BPUlRBTF9JRCB8fCAhSFVCU1BPVF9GT1JNX0dVSUQpIHJldHVybjsKICB0cnkgewogICAgY29uc3QgY29udGV4dCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UociwgbGVhZENvbnRleHQpOwogICAgY29uc3QgdXJpID0gcGFnZVVyaSgpOwogICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vZm9ybXMtJHtIVUJTUE9UX1JFR0lPTn0uaHNmb3Jtcy5jb20vc3VibWlzc2lvbnMvdjMvaW50ZWdyYXRpb24vc3VibWl0LyR7SFVCU1BPVF9QT1JUQUxfSUR9LyR7SFVCU1BPVF9GT1JNX0dVSUR9YCwgewogICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iIH0sCiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICBmaWVsZHM6IFsKICAgICAgICAgIHsgbmFtZTogImZpcnN0bmFtZSIsIHZhbHVlOiBsZWFkLm5hbWUuc3BsaXQoIiAiKVswXSB9LAogICAgICAgICAgeyBuYW1lOiAibGFzdG5hbWUiLCB2YWx1ZTogbGVhZC5uYW1lLnNwbGl0KCIgIikuc2xpY2UoMSkuam9pbigiICIpIHx8ICIiIH0sCiAgICAgICAgICB7IG5hbWU6ICJlbWFpbCIsIHZhbHVlOiBsZWFkLmVtYWlsIH0sCiAgICAgICAgICB7IG5hbWU6ICJjb21wYW55IiwgdmFsdWU6IGxlYWQub3JnIHx8ICIiIH0sCiAgICAgICAgICB7IG5hbWU6ICJqb2J0aXRsZSIsIHZhbHVlOiBsZWFkLnJvbGUgfHwgIiIgfSwKICAgICAgICAgIHsgbmFtZTogIm1lc3NhZ2UiLCB2YWx1ZTogY29udGV4dCB9LAogICAgICAgIF0sCiAgICAgICAgY29udGV4dDogeyBwYWdlTmFtZTogIlNtYXJ0IE1hdGNoIFJPSSBDYWxjdWxhdG9yICh3ZWIpIiwgLi4uKHVyaSA\/IHsgcGFnZVVyaTogdXJpIH0gOiB7fSkgfSwKICAgICAgICBsZWdhbENvbnNlbnRPcHRpb25zOiB7IGNvbnNlbnQ6IHsgY29uc2VudFRvUHJvY2VzczogdHJ1ZSwgdGV4dDogIkkgYWdyZWUgdG8gcmVjZWl2ZSBjb21tdW5pY2F0aW9ucyBhYm91dCBteSBST0kgZXN0aW1hdGUuIiB9IH0sCiAgICAgIH0pLAogICAgfSk7CiAgICAvLyBIdWJTcG90IGFuc3dlcnMgMjAwIG9uIHN1Y2Nlc3MgYW5kIDQwMCB3aXRoIGEgSlNPTiByZWFzb24gb24gcmVqZWN0aW9uLgogICAgLy8gU3VyZmFjZSB0aGUgcmVhc29uOiB0aGUgdmlzaXRvcidzIGpvdXJuZXkgaXMgdW5hZmZlY3RlZCBlaXRoZXIgd2F5LCBzbwogICAgLy8gd2l0aG91dCB0aGlzIGEgbWlzY29uZmlndXJlZCBmb3JtIGlzIGludmlzaWJsZS4KICAgIGlmICghcmVzLm9rKSB7CiAgICAgIGNvbnN0IGRldGFpbCA9IGF3YWl0IHJlcy50ZXh0KCkuY2F0Y2goKCkgPT4gIiIpOwogICAgICBjb25zb2xlLndhcm4oYEh1YlNwb3QgcmVqZWN0ZWQgdGhlIHN1Ym1pc3Npb24gKEhUVFAgJHtyZXMuc3RhdHVzfSkuIENoZWNrIEhVQlNQT1RfRk9STV9HVUlEIGFuZCB0aGF0IGV2ZXJ5IGZpZWxkIGFib3ZlIGV4aXN0cyBvbiB0aGF0IGZvcm0uYCwgZGV0YWlsKTsKICAgIH0KICB9IGNhdGNoIChlKSB7CiAgICAvLyBOZXR3b3JrLWxldmVsIGZhaWx1cmU6IGJsb2NrZWQgYnkgQ1NQLCBhbiBhZC1ibG9ja2VyLCBvZmZsaW5lLCBvciBhCiAgICAvLyBzYW5kYm94ZWQgaWZyYW1lIHdpdGggbm8gYWxsb3ctc2FtZS1vcmlnaW4uIFRoZSBsZWFkIGlzIHN0aWxsIGluIHRoZQogICAgLy8gbG9jYWwgYmFja3VwIGFib3ZlLgogICAgY29uc29sZS53YXJuKCJIdWJTcG90IHN1Ym1pc3Npb24gY291bGQgbm90IGJlIHNlbnQ6IiwgZSk7CiAgfQp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgdmFuaWxsYS9kb20uanMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBBIDQwLWxpbmUgc3RhbmQtaW4gZm9yIHRoZSBwYXJ0cyBvZiBSZWFjdCB0aGlzIGNhbGN1bGF0b3IgYWN0dWFsbHkgdXNlZC4KCiAgIGBoKClgIG1pcnJvcnMgUmVhY3QuY3JlYXRlRWxlbWVudCBjbG9zZWx5IGVub3VnaCB0aGF0IHRoZSBwb3J0IG9mIGVhY2gKICAgY29tcG9uZW50IGlzIGEgbmVhci1tZWNoYW5pY2FsIHRyYW5zbGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBKU1gsIGluY2x1ZGluZwogICB0aGUgaW5saW5lIHN0eWxlIG9iamVjdHM6IG51bWJlcnMgZ2V0ICJweCIgYXBwZW5kZWQgZXhhY3RseSBhcyBSZWFjdCBkb2VzLAogICBzbyB0aGUgcGxhaW4tSlMgYnVpbGQgcmVuZGVycyBwaXhlbCBmb3IgcGl4ZWwgbGlrZSB0aGUgUmVhY3Qgb25lLgoKICAgVGhlcmUgaXMgbm8gdmlydHVhbCBET00gYW5kIG5vIHJlY29uY2lsaWF0aW9uLiBUaGUgY2FsY3VsYXRvciBpcyBhIHNtYWxsCiAgIG51bWJlciBvZiBkaXNjcmV0ZSBzY3JlZW5zLCBzbyBhIHNjcmVlbiBpcyBidWlsdCBvbmNlIGFuZCBlaXRoZXIgcmVwbGFjZWQKICAgd2hvbGVzYWxlIG9uIG5hdmlnYXRpb24gb3IgcGF0Y2hlZCBieSBoYW5kIHdoZXJlIGEgdmFsdWUgdXBkYXRlcyBsaXZlICh0aGUKICAgY29uZmlkZW5jZSBzbGlkZXIgb24gdGhlIHJlc3VsdHMgcGFnZSkuIFRoYXQgaXMgdGhlIHdob2xlIGZyYW1ld29yay4KICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgovKiBDU1MgcHJvcGVydGllcyB0aGF0IHRha2UgYSBiYXJlIG51bWJlci4gRXZlcnl0aGluZyBlbHNlIGdldHMgInB4IiB3aGVuCiAgIGhhbmRlZCBhIG51bWJlciwgd2hpY2ggaXMgdGhlIHJ1bGUgUmVhY3QgZm9sbG93cy4gKi8KY29uc3QgVU5JVExFU1MgPSBuZXcgU2V0KFsKICAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYXNwZWN0UmF0aW8nLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVdpZHRoJywKICAnYm94RmxleCcsICdib3hGbGV4R3JvdXAnLCAnYm94T3JkaW5hbEdyb3VwJywgJ2NvbHVtbkNvdW50JywgJ2NvbHVtbnMnLCAnZmxleCcsICdmbGV4R3JvdycsICdmbGV4UG9zaXRpdmUnLAogICdmbGV4U2hyaW5rJywgJ2ZsZXhOZWdhdGl2ZScsICdmbGV4T3JkZXInLCAnZ3JpZEFyZWEnLCAnZ3JpZFJvdycsICdncmlkUm93RW5kJywgJ2dyaWRSb3dTcGFuJywgJ2dyaWRSb3dTdGFydCcsCiAgJ2dyaWRDb2x1bW4nLCAnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3BhbicsICdncmlkQ29sdW1uU3RhcnQnLCAnZm9udFdlaWdodCcsICdsaW5lQ2xhbXAnLCAnbGluZUhlaWdodCcsCiAgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JwaGFucycsICd0YWJTaXplJywgJ3dpZG93cycsICd6SW5kZXgnLCAnem9vbScsICdmaWxsT3BhY2l0eScsICdmbG9vZE9wYWNpdHknLAogICdzdG9wT3BhY2l0eScsICdzdHJva2VEYXNoYXJyYXknLCAnc3Ryb2tlRGFzaG9mZnNldCcsICdzdHJva2VNaXRlcmxpbWl0JywgJ3N0cm9rZU9wYWNpdHknLCAnc3Ryb2tlV2lkdGgnLApdKTsKCmZ1bmN0aW9uIHNldFN0eWxlKGVsLCBzdHlsZSkgewogIGZvciAoY29uc3QgayBpbiBzdHlsZSkgewogICAgY29uc3QgdiA9IHN0eWxlW2tdOwogICAgaWYgKHYgPT0gbnVsbCkgY29udGludWU7CiAgICBlbC5zdHlsZVtrXSA9ICh0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgIVVOSVRMRVNTLmhhcyhrKSkgPyB2ICsgJ3B4JyA6IHY7CiAgfQp9CgpmdW5jdGlvbiBhcHBlbmRDaGlsZChlbCwgYykgewogIGlmIChjID09IG51bGwgfHwgYyA9PT0gZmFsc2UgfHwgYyA9PT0gdHJ1ZSkgcmV0dXJuOwogIGlmIChBcnJheS5pc0FycmF5KGMpKSB7IGMuZm9yRWFjaCh4ID0+IGFwcGVuZENoaWxkKGVsLCB4KSk7IHJldHVybjsgfQogIGVsLmFwcGVuZENoaWxkKGMgaW5zdGFuY2VvZiBOb2RlID8gYyA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjKSkpOwp9CgpmdW5jdGlvbiBhcHBseVByb3BzKGVsLCBwcm9wcykgewogIGZvciAoY29uc3QgayBpbiBwcm9wcykgewogICAgY29uc3QgdiA9IHByb3BzW2tdOwogICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSBmYWxzZSkgY29udGludWU7CiAgICBpZiAoayA9PT0gJ3N0eWxlJykgeyBzZXRTdHlsZShlbCwgdik7IH0KICAgIGVsc2UgaWYgKGsgPT09ICdjbGFzc05hbWUnIHx8IGsgPT09ICdjbGFzcycpIHsgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIHYpOyB9CiAgICBlbHNlIGlmIChrID09PSAnaHRtbCcpIHsgZWwuaW5uZXJIVE1MID0gdjsgfSAgICAgICAgICAgIC8vIHRydXN0ZWQsIGF1dGhvci1zdXBwbGllZCBvbmx5CiAgICBlbHNlIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykgJiYgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHsgZWwuYWRkRXZlbnRMaXN0ZW5lcihrLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCksIHYpOyB9CiAgICBlbHNlIGlmIChrID09PSAndmFsdWUnIHx8IGsgPT09ICdjaGVja2VkJyB8fCBrID09PSAnZGlzYWJsZWQnIHx8IGsgPT09ICdzZWxlY3RlZCcpIHsgZWxba10gPSB2OyB9CiAgICBlbHNlIHsgZWwuc2V0QXR0cmlidXRlKGssIHYgPT09IHRydWUgPyAnJyA6IFN0cmluZyh2KSk7IH0KICB9Cn0KCmZ1bmN0aW9uIGgodGFnLCBwcm9wcywgLi4uY2hpbGRyZW4pIHsKICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKICBpZiAocHJvcHMpIGFwcGx5UHJvcHMoZWwsIHByb3BzKTsKICBjaGlsZHJlbi5mb3JFYWNoKGMgPT4gYXBwZW5kQ2hpbGQoZWwsIGMpKTsKICByZXR1cm4gZWw7Cn0KCi8qIFNhbWUsIGluIHRoZSBTVkcgbmFtZXNwYWNlOiBhdHRyaWJ1dGVzIG9ubHksIG5vIHN0eWxlIG9iamVjdHMgbmVlZGVkLiAqLwpmdW5jdGlvbiBzKHRhZywgYXR0cnMsIC4uLmNoaWxkcmVuKSB7CiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnKTsKICBpZiAoYXR0cnMpIGZvciAoY29uc3QgayBpbiBhdHRycykgeyBpZiAoYXR0cnNba10gIT0gbnVsbCkgZWwuc2V0QXR0cmlidXRlKGssIFN0cmluZyhhdHRyc1trXSkpOyB9CiAgY2hpbGRyZW4uZm9yRWFjaChjID0+IHsgaWYgKGMpIGVsLmFwcGVuZENoaWxkKGMpOyB9KTsKICByZXR1cm4gZWw7Cn0KCi8qIEEgZG9jdW1lbnQgZnJhZ21lbnQsIGZvciB0aGUgcGxhY2VzIHRoZSBKU1ggdXNlZCBhIDw+IOKApiA8Lz4gd3JhcHBlci4gKi8KZnVuY3Rpb24gZnJhZyguLi5jaGlsZHJlbikgewogIGNvbnN0IGYgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgY2hpbGRyZW4uZm9yRWFjaChjID0+IGFwcGVuZENoaWxkKGYsIGMpKTsKICByZXR1cm4gZjsKfQoKLyogUmVwbGFjZSBhbiBlbGVtZW50J3MgY2hpbGRyZW4gaW4gb25lIGdvLiAqLwpmdW5jdGlvbiBmaWxsKGVsLCAuLi5jaGlsZHJlbikgewogIGVsLnRleHRDb250ZW50ID0gJyc7CiAgY2hpbGRyZW4uZm9yRWFjaChjID0+IGFwcGVuZENoaWxkKGVsLCBjKSk7CiAgcmV0dXJuIGVsOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgdmFuaWxsYS9pY29ucy5qcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFN0cm9rZS1iYXNlZCBTVkcgaWNvbnMsIDI0eDI0IHZpZXdCb3gsIHJvdW5kIGNhcHMgYW5kIGpvaW5zLgoKICAgU2FtZSBnZW9tZXRyeSBhcyB0aGUgUmVhY3QgYnVpbGQncyBJY29ucy5qc3gsIGhlbGQgYXMgc2hhcGUgZGF0YSByYXRoZXIKICAgdGhhbiBtYXJrdXA6IGEgcGF0aCBpcyBqdXN0IGl0cyBgZGAsIGEgcmVjdCBvciBjaXJjbGUgaXRzIGF0dHJpYnV0ZXMuIE9uZQogICBidWlsZGVyIHR1cm5zIGFueSBvZiB0aGVtIGludG8gYW4gPHN2Zz4uCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKY29uc3QgU0hBUEVTID0gewogIGhvc3BpdGFsOiBbWyJwYXRoIiwiTTIgMjFoMjAiXSwgWyJyZWN0Iix7IngiOiI0IiwieSI6IjExIiwid2lkdGgiOiIxNiIsImhlaWdodCI6IjEwIiwicngiOiIxIn1dLCBbInBhdGgiLCJNNCAxMWw4LTcgOCA3Il0sIFsicGF0aCIsIk0xMiAxNHY0TTEwIDE2aDQiXV0sCiAgY29tbXVuaXR5OiBbWyJwYXRoIiwiTTIgMjFoMjAiXSwgWyJyZWN0Iix7IngiOiIzIiwieSI6IjgiLCJ3aWR0aCI6IjE4IiwiaGVpZ2h0IjoiMTMiLCJyeCI6IjEifV0sIFsicGF0aCIsIk0zIDE0aDE4Il0sIFsicGF0aCIsIk0xMiAzdjVNMTAgNS41aDQiXSwgWyJwYXRoIiwiTTcgMTFoMk0xNSAxMWgyIl0sIFsicGF0aCIsIk03IDE3aDJNMTUgMTdoMiJdLCBbInJlY3QiLHsieCI6IjEwIiwieSI6IjE2Iiwid2lkdGgiOiI0IiwiaGVpZ2h0IjoiNSIsInJ4IjoiMC41In1dXSwKICBwaHlzaWNpYW46IFtbInBhdGgiLCJNNyAzdjNhNSA1IDAgMDA1IDVoMGE1IDUgMCAwMDUtNVYzIl0sIFsicGF0aCIsIk0xMiAxMXY0YTMgMyAwIDAwMyAzaDBhMyAzIDAgMDAzLTN2LTIiXSwgWyJjaXJjbGUiLHsiY3giOiIxOCIsImN5IjoiMjAiLCJyIjoiMi41In1dXSwKICBob21lOiBbWyJwYXRoIiwiTTMgMTBsOS03IDkgNyJdLCBbInBhdGgiLCJNNSA5djExYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjkiXSwgWyJwYXRoIiwiTTkuNSAyMXYtNmg1djYiXV0sCiAgYmVoYXZpb3JhbDogW1sicGF0aCIsIk0xMiAzYy0xLjUgMC0zIC41LTQgMS41cy0xLjUgMi0yIDNjLS41IDEuNS0uNSAzIDAgNHMxIDEuNSAxIDIuNWMwIDEuNS41IDMgMS41IDRTMTAuNSAyMCAxMiAyMCJdLCBbInBhdGgiLCJNMTIgM2MxLjUgMCAzIC41IDQgMS41czEuNSAyIDIgM2MuNSAxLjUuNSAzIDAgNHMtMSAxLjUtMSAyLjVjMCAxLjUtLjUgMy0xLjUgNFMxMy41IDIwIDEyIDIwIl0sIFsicGF0aCIsIk0xMiAxMmMtLjYtLjktMS44LTEuMS0yLjItLjNzLjMgMS42IDIuMiAzYzEuOS0xLjQgMi41LTIuMiAyLjItM3MtMS42LS42LTIuMi4zeiJdXSwKICBjbG9jazogW1siY2lyY2xlIix7ImN4IjoiMTIiLCJjeSI6IjEyIiwiciI6IjEwIn1dLCBbInBhdGgiLCJNMTIgNnY2bDQgMiJdXSwKICBwb3VuZDogW1sicGF0aCIsIk0xOCA3YzAtNS4zMzMtOC01LjMzMy04IDAiXSwgWyJwYXRoIiwiTTEwIDd2MTQiXSwgWyJwYXRoIiwiTTYgMjFoMTIiXSwgWyJwYXRoIiwiTTYgMTNoMTAiXV0sCiAgbmV0d29yazogW1siY2lyY2xlIix7ImN4IjoiMTIiLCJjeSI6IjUiLCJyIjoiMi41In1dLCBbImNpcmNsZSIseyJjeCI6IjQuNSIsImN5IjoiMTkiLCJyIjoiMi41In1dLCBbImNpcmNsZSIseyJjeCI6IjE5LjUiLCJjeSI6IjE5IiwiciI6IjIuNSJ9XSwgWyJwYXRoIiwiTTEyIDcuNXY0TTcgMThsMy41LTYuNU0xNyAxOGwtMy41LTYuNSJdXSwKICBjYWxlbmRhcjogW1sicmVjdCIseyJ4IjoiMyIsInkiOiI1Iiwid2lkdGgiOiIxOCIsImhlaWdodCI6IjE2IiwicngiOiIyIn1dLCBbInBhdGgiLCJNOCAzdjRNMTYgM3Y0TTMgMTBoMTgiXSwgWyJwYXRoIiwiTTggMTRoMk0xMSAxNGgyTTE0IDE0aDIiXSwgWyJwYXRoIiwiTTggMTdoMk0xMSAxN2gyIl1dLAogIGxpZ2h0YnVsYjogW1sicGF0aCIsIk05IDE4aDZNMTAgMjFoNCJdLCBbInBhdGgiLCJNMTIgMmE3IDcgMCAwMC00IDEyLjdWMTdoOHYtMi4zQTcgNyAwIDAwMTIgMnoiXV0sCiAgY2hlY2s6IFtbImNpcmNsZSIseyJjeCI6IjEyIiwiY3kiOiIxMiIsInIiOiIxMCJ9XSwgWyJwYXRoIiwiTTggMTJsMyAzIDUtNiJdXSwKICBzZWFyY2g6IFtbImNpcmNsZSIseyJjeCI6IjExIiwiY3kiOiIxMSIsInIiOiI3In1dLCBbInBhdGgiLCJNMTYgMTZsNSA1Il1dLAogIGRvd25sb2FkOiBbWyJwYXRoIiwiTTEyIDN2MTEiXSwgWyJwYXRoIiwiTTcuNSAxMC41TDEyIDE1bDQuNS00LjUiXSwgWyJwYXRoIiwiTTQgMTd2MmEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMnYtMiJdXSwKfTsKCmZ1bmN0aW9uIEljb24obmFtZSwgc2l6ZSA9IDI0LCBzdHJva2UgPSAnY3VycmVudENvbG9yJywgc3cgPSAxLjgpIHsKICBjb25zdCBzaGFwZXMgPSBTSEFQRVNbbmFtZV07CiAgaWYgKCFzaGFwZXMpIHJldHVybiBudWxsOwogIGNvbnN0IHN2ZyA9IHMoJ3N2ZycsIHsKICAgIHdpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemUsIHZpZXdCb3g6ICcwIDAgMjQgMjQnLCBmaWxsOiAnbm9uZScsIHN0cm9rZSwKICAgICdzdHJva2Utd2lkdGgnOiBzdywgJ3N0cm9rZS1saW5lY2FwJzogJ3JvdW5kJywgJ3N0cm9rZS1saW5lam9pbic6ICdyb3VuZCcsCiAgICAnYXJpYS1oaWRkZW4nOiAndHJ1ZScsIGZvY3VzYWJsZTogJ2ZhbHNlJywKICB9KTsKICBzdmcuc3R5bGUuZmxleFNocmluayA9ICcwJzsKICBmb3IgKGNvbnN0IFt0YWcsIGF0dHJzXSBvZiBzaGFwZXMpIHsKICAgIHN2Zy5hcHBlbmRDaGlsZChzKHRhZywgdGFnID09PSAncGF0aCcgPyB7IGQ6IGF0dHJzIH0gOiBhdHRycykpOwogIH0KICByZXR1cm4gc3ZnOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgdmFuaWxsYS91aS5qcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFNoYXJlZCBVSSBwaWVjZXMsIHBvcnRlZCBvbmUgZm9yIG9uZSBmcm9tIHRoZSBSZWFjdCBidWlsZCdzIGNvbXBvbmVudHMuCgogICBFYWNoIHdhcyBhIGNvbXBvbmVudCB0YWtpbmcgcHJvcHM7IGhlcmUgZWFjaCBpcyBhIGZ1bmN0aW9uIHJldHVybmluZyBhIERPTQogICBub2RlLiBXaGVyZSB0aGUgb3JpZ2luYWwgaGVsZCBzdGF0ZSAodGhlIHRvb2x0aXAncyBvcGVuL2Nsb3NlZCwgdGhlCiAgIG1ldGhvZG9sb2d5IHBhbmVsJ3MgZXhwYW5kZWQvY29sbGFwc2VkKSB0aGUgc3RhdGUgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbiBhCiAgIGNsb3N1cmUgYW5kIHRoZSBub2RlIGlzIHBhdGNoZWQgZGlyZWN0bHksIHdoaWNoIGlzIGFsbCB0aGUgc3RhdGUgdGhlcmUgd2FzLgogICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCmZ1bmN0aW9uIENhcmQoc3R5bGUsIC4uLmNoaWxkcmVuKSB7CiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgYmFja2dyb3VuZDogQy5zdXJmYWNlLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlcn1gLCBib3JkZXJSYWRpdXM6IDIwLCBwYWRkaW5nOiAnY2xhbXAoMThweCwgM3Z3LCAzNHB4KScsIC4uLnN0eWxlIH0gfSwgLi4uY2hpbGRyZW4pOwp9CgpmdW5jdGlvbiBTZWN0aW9uVGl0bGUobnVtYmVyLCB0ZXh0KSB7CiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuaDIsIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IEMudGV4dE1pZCwgbWFyZ2luQm90dG9tOiAyMiwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxNCB9IH0sCiAgICBoKCdzcGFuJywgeyBzdHlsZTogeyB3aWR0aDogNDAsIGhlaWdodDogNDAsIGJvcmRlclJhZGl1czogJzUwJScsIGJhY2tncm91bmQ6IEMuYWNjZW50LCBjb2xvcjogJyNmZmYnLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsIGZvbnRTaXplOiBGLmgzLCBmb250V2VpZ2h0OiA4MDAsIGZsZXhTaHJpbms6IDAgfSB9LCBudW1iZXIpLAogICAgdGV4dCk7Cn0KCmNvbnN0IEhlbHBlciA9ICguLi5jaGlsZHJlbikgPT4gaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE1pZCwgbGluZUhlaWdodDogMS42LCBtYXJnaW5Ub3A6IDQgfSB9LCAuLi5jaGlsZHJlbik7CmNvbnN0IExlYWQgPSAoLi4uY2hpbGRyZW4pID0+IGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgY29sb3I6IEMudGV4dE1pZCwgbGluZUhlaWdodDogMS42LCBtYXJnaW5Cb3R0b206IDI4LCBtYXhXaWR0aDogNzYwIH0gfSwgLi4uY2hpbGRyZW4pOwoKLyogVGhlIChpKSBidWJibGUuIFBvc2l0aW9uZWQgb24gb3BlbiBhZ2FpbnN0IHRoZSB2aWV3cG9ydCwgc28gaXQgaXMgbmV2ZXIKICAgY2xpcHBlZCBieSB0aGUgZnJhbWUgZWRnZSwgYW5kIGRpc21pc3NlZCBieSBhIGZ1bGwtc2NyZWVuIGJhY2tkcm9wLgogICBDbGlja3MgYXJlIHN0b3BwZWQgc28gYSB0b29sdGlwIGluc2lkZSBhIGNsaWNrYWJsZSByb3cgY2Fubm90IHRvZ2dsZSBpdC4gKi8KZnVuY3Rpb24gSW5mb1RpcCh0ZXh0KSB7CiAgbGV0IHNob3cgPSBmYWxzZSwgYnViYmxlID0gbnVsbCwgYmFja2Ryb3AgPSBudWxsOwogIGNvbnN0IHdyYXAgPSBoKCdzcGFuJywgeyBzdHlsZTogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZGlzcGxheTogJ2lubGluZS1mbGV4JyB9LCBvbkNsaWNrOiBlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkgfSk7CiAgY29uc3QgaWNvbiA9IGgoJ3NwYW4nLCB7CiAgICByb2xlOiAnYnV0dG9uJywgJ2FyaWEtbGFiZWwnOiAnTW9yZSBpbmZvcm1hdGlvbicsIHRhYmluZGV4OiAnMCcsCiAgICBzdHlsZTogeyB3aWR0aDogMjgsIGhlaWdodDogMjgsIGJvcmRlclJhZGl1czogJzUwJScsIGJhY2tncm91bmQ6IEMuYm9yZGVyLCBjb2xvcjogQy50ZXh0TWlkLCBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBmb250U2l6ZTogRi5zbWFsbCwgZm9udFdlaWdodDogNzAwLCBjdXJzb3I6ICdwb2ludGVyJywgZmxleFNocmluazogMCB9LAogIH0sICdpJyk7CgogIGNvbnN0IGNsb3NlID0gKCkgPT4gewogICAgc2hvdyA9IGZhbHNlOwogICAgaWYgKGJ1YmJsZSkgeyBidWJibGUucmVtb3ZlKCk7IGJ1YmJsZSA9IG51bGw7IH0KICAgIGlmIChiYWNrZHJvcCkgeyBiYWNrZHJvcC5yZW1vdmUoKTsgYmFja2Ryb3AgPSBudWxsOyB9CiAgICBpY29uLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOwogIH07CgogIGNvbnN0IG9wZW4gPSAoKSA9PiB7CiAgICBzaG93ID0gdHJ1ZTsKICAgIGljb24uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTsKICAgIGJhY2tkcm9wID0gaCgnZGl2JywgeyBzdHlsZTogeyBwb3NpdGlvbjogJ2ZpeGVkJywgaW5zZXQ6IDAsIHpJbmRleDogOTk5OTYgfSwgb25DbGljazogZSA9PiB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IGNsb3NlKCk7IH0gfSk7CiAgICBidWJibGUgPSBoKCdzcGFuJywgewogICAgICByb2xlOiAndG9vbHRpcCcsCiAgICAgIHN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsIGJhY2tncm91bmQ6IEMuc3VyZmFjZTIsIGNvbG9yOiBDLnRleHQsCiAgICAgICAgZm9udFNpemU6IEYuc21hbGwsIGxpbmVIZWlnaHQ6IDEuNiwgcGFkZGluZzogJzIwcHggMjRweCcsCiAgICAgICAgYm9yZGVyUmFkaXVzOiAxNiwgd2lkdGg6ICdtaW4oNDAwcHgsIGNhbGMoMTAwdncgLSA0MHB4KSknLAogICAgICAgIGJveFNoYWRvdzogJzAgMTJweCA0MHB4IHJnYmEoMTUsNjUsNzAsLjI4KScsIHpJbmRleDogOTk5OTcsCiAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Qy5ib3JkZXJ9YCwKICAgICAgfSwKICAgIH0sIHRleHQpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiYWNrZHJvcCk7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJ1YmJsZSk7CgogICAgLy8gRGVjaWRlIGFib3ZlIG9yIGJlbG93IGZyb20gdGhlIHJvb20gYWN0dWFsbHkgYXZhaWxhYmxlLCB0aGVuIGNsYW1wCiAgICAvLyBob3Jpem9udGFsbHkgc28gdGhlIGJ1YmJsZSBhbHdheXMgc3RheXMgb24gc2NyZWVuLgogICAgY29uc3QgcmVjdCA9IGljb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCBXID0gTWF0aC5taW4oNDAwLCB3aW5kb3cuaW5uZXJXaWR0aCAtIDQwKTsKICAgIGNvbnN0IEVTVElNQVRFRF9IID0gMjYwLCBNID0gMTQsIFNBRkVfVE9QID0gMTAwLCBTQUZFX0JPVFRPTSA9IDYwOwogICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tIC0gU0FGRV9CT1RUT007CiAgICBjb25zdCBzcGFjZUFib3ZlID0gcmVjdC50b3AgLSBTQUZFX1RPUDsKICAgIGNvbnN0IHBsYWNlQWJvdmUgPSBzcGFjZUJlbG93IDwgRVNUSU1BVEVEX0ggJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3c7CiAgICBzZXRTdHlsZShidWJibGUsIHsKICAgICAgdG9wOiBwbGFjZUFib3ZlID8gcmVjdC50b3AgLSBNIDogcmVjdC5ib3R0b20gKyBNLAogICAgICBsZWZ0OiBNYXRoLm1heCgyMCwgTWF0aC5taW4ocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIgLSBXIC8gMiwgd2luZG93LmlubmVyV2lkdGggLSBXIC0gMjApKSwKICAgICAgdHJhbnNmb3JtOiBwbGFjZUFib3ZlID8gJ3RyYW5zbGF0ZVkoLTEwMCUpJyA6ICdub25lJywKICAgIH0pOwogIH07CgogIGNvbnN0IHRvZ2dsZSA9IGUgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBzaG93ID8gY2xvc2UoKSA6IG9wZW4oKTsgfTsKICBpY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlKTsKICBpY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHsgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB0b2dnbGUoZSk7IH0gfSk7CiAgd3JhcC5hcHBlbmRDaGlsZChpY29uKTsKICByZXR1cm4gd3JhcDsKfQoKLyogYHNjYWxlYCBpcyBvcHRpb25hbC4gV2l0aG91dCBpdCB0aGlzIGlzIGEgcGxhaW4gbGluZWFyIHJhbmdlIGlucHV0LCB3aGljaCBpcwogICB3aGF0IGV2ZXJ5IHNsaWRlciBidXQgdGhlIGJhbmsgcmVnaXN0ZXIgdXNlcy4gV2l0aCBpdCwgdGhlIHJhbmdlIGlucHV0IHJ1bnMKICAgb3ZlciBwb3NpdGlvbnMgKDAuLnNjYWxlLnN0ZXBzKSBhbmQgdGhlIHBvc2l0aW9uIGlzIG1hcHBlZCB0byBhbmQgZnJvbSB0aGUKICAgcmVhbCB2YWx1ZSwgc28gYSBzbGlkZXIgY2FuIGNvdmVyIGEgcmFuZ2UgdG9vIHdpZGUgdG8gYmUgdXNhYmxlIGxpbmVhcmx5LiAqLwpmdW5jdGlvbiBUb3VjaFNsaWRlcih7IGxhYmVsLCB2YWx1ZSwgbWluLCBtYXgsIHN0ZXAgPSAxLCBvbkNoYW5nZSwgZm9ybWF0LCB0aXAsIHNjYWxlIH0pIHsKICBjb25zdCBvdXQgPSBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMSwgZm9udFdlaWdodDogODAwLCBjb2xvcjogQy5hY2NlbnQgfSB9LCBmb3JtYXQgPyBmb3JtYXQodmFsdWUpIDogdmFsdWUpOwogIGNvbnN0IGlucHV0ID0gaCgnaW5wdXQnLCB7CiAgICB0eXBlOiAncmFuZ2UnLCAnYXJpYS1sYWJlbCc6IGxhYmVsLAogICAgbWluOiBzY2FsZSA\/IDAgOiBtaW4sIG1heDogc2NhbGUgPyBzY2FsZS5zdGVwcyA6IG1heCwgc3RlcDogc2NhbGUgPyAxIDogc3RlcCwKICAgIHZhbHVlOiBzY2FsZSA\/IHNjYWxlLnRvUG9zKHZhbHVlKSA6IHZhbHVlLAogICAgLy8gU2NyZWVuIHJlYWRlcnMgb3RoZXJ3aXNlIHJlYWQgdGhlIHJhdyBudW1iZXIgKCIyMDAwIiksIG5vdCB0aGUgZmlndXJlCiAgICAvLyBvbiBzY3JlZW4gKCIyLDAwMCIgLyAiOC4zJSIpLiBhcmlhLXZhbHVldGV4dCBnaXZlcyB0aGVtIHRoZSByZWFsIG9uZS4KICAgIC8vIE9uIGEgc2NhbGVkIHNsaWRlciBhcmlhLXZhbHVlbm93IGlzIGEgcG9zaXRpb24sIG5vdCBhIGhlYWRjb3VudCwgc28gdGhpcwogICAgLy8gaXMgdGhlIG9ubHkgYXR0cmlidXRlIHRoYXQgcmVhZHMgY29ycmVjdGx5IGF0IGFsbC4KICAgICdhcmlhLXZhbHVldGV4dCc6IFN0cmluZyhmb3JtYXQgPyBmb3JtYXQodmFsdWUpIDogdmFsdWUpLAogICAgc3R5bGU6IHsgd2lkdGg6ICcxMDAlJywgY3Vyc29yOiAncG9pbnRlcicsIGFjY2VudENvbG9yOiBDLmFjY2VudCB9LAogICAgb25JbnB1dDogZSA9PiB7CiAgICAgIGNvbnN0IHYgPSBzY2FsZSA\/IHNjYWxlLmZyb21Qb3MoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSkgOiBOdW1iZXIoZS50YXJnZXQudmFsdWUpOwogICAgICBvdXQudGV4dENvbnRlbnQgPSBmb3JtYXQgPyBmb3JtYXQodikgOiB2OwogICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWV0ZXh0JywgU3RyaW5nKGZvcm1hdCA\/IGZvcm1hdCh2KSA6IHYpKTsKICAgICAgb25DaGFuZ2Uodik7CiAgICB9LAogIH0pOwogIHJldHVybiBoKCdkaXYnLCB7IHN0eWxlOiB7IG1hcmdpbkJvdHRvbTogMjQgfSB9LAogICAgbGFiZWwgJiYgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLCBtYXJnaW5Cb3R0b206IDEyIH0gfSwKICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEwIH0gfSwKICAgICAgICBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5ib2R5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBDLnRleHRNaWQgfSB9LCBsYWJlbCksCiAgICAgICAgdGlwICYmIEluZm9UaXAodGlwKSksCiAgICAgIG91dCksCiAgICBpbnB1dCk7Cn0KCmZ1bmN0aW9uIFN0ZXBwZXIoeyBsYWJlbCwgdmFsdWUsIG1pbiA9IDAsIG1heCA9IDk5OSwgc3RlcCA9IDEsIG9uQ2hhbmdlLCB0aXAgfSkgewogIGNvbnN0IGJ0biA9IHsgd2lkdGg6IDQ2LCBoZWlnaHQ6IDQ2LCBib3JkZXJSYWRpdXM6IDEyLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlcn1gLCBiYWNrZ3JvdW5kOiBDLnN1cmZhY2UsIGNvbG9yOiBDLnRleHRNaWQsIGZvbnRTaXplOiAyNCwgZm9udFdlaWdodDogNzAwLCBjdXJzb3I6ICdwb2ludGVyJywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBmb250RmFtaWx5OiAnaW5oZXJpdCcsIGZsZXhTaHJpbms6IDAgfTsKICBjb25zdCBvdXQgPSBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMSwgZm9udFdlaWdodDogODAwLCBjb2xvcjogQy5hY2NlbnQsIG1pbldpZHRoOiA2NCwgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0sIHZhbHVlKTsKICBsZXQgdiA9IHZhbHVlOwogIGNvbnN0IHNldCA9IG5leHQgPT4geyB2ID0gbmV4dDsgb3V0LnRleHRDb250ZW50ID0gdjsgb25DaGFuZ2Uodik7IH07CiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxNCwgbWFyZ2luQm90dG9tOiAyMCwgZmxleFdyYXA6ICd3cmFwJyB9IH0sCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZsZXg6ICcxIDEgMjAwcHgnLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEwIH0gfSwKICAgICAgaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogQy50ZXh0TWlkIH0gfSwgbGFiZWwpLAogICAgICB0aXAgJiYgSW5mb1RpcCh0aXApKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxNCB9IH0sCiAgICAgIGgoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicsICdhcmlhLWxhYmVsJzogJ0RlY3JlYXNlJywgc3R5bGU6IGJ0biwgb25DbGljazogKCkgPT4gc2V0KE1hdGgubWF4KG1pbiwgdiAtIHN0ZXApKSB9LCAn4oiSJyksCiAgICAgIG91dCwKICAgICAgaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgJ2FyaWEtbGFiZWwnOiAnSW5jcmVhc2UnLCBzdHlsZTogYnRuLCBvbkNsaWNrOiAoKSA9PiBzZXQoTWF0aC5taW4obWF4LCB2ICsgc3RlcCkpIH0sICcrJykpKTsKfQoKZnVuY3Rpb24gVG9nZ2xlUm93KHsgb24sIG9uVG9nZ2xlLCBsYWJlbCwgdGlwIH0pIHsKICBsZXQgc3RhdGUgPSBvbjsKICBjb25zdCBrbm9iID0gaCgnZGl2JywgeyBzdHlsZTogeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAzLCBsZWZ0OiBzdGF0ZSA\/IDI3IDogMywgd2lkdGg6IDI4LCBoZWlnaHQ6IDI4LCBib3JkZXJSYWRpdXM6ICc1MCUnLCBiYWNrZ3JvdW5kOiAnI2ZmZicsIHRyYW5zaXRpb246ICdsZWZ0IC4ycycgfSB9KTsKICBjb25zdCB0cmFjayA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgd2lkdGg6IDU4LCBoZWlnaHQ6IDM0LCBib3JkZXJSYWRpdXM6IDE3LCBiYWNrZ3JvdW5kOiBzdGF0ZSA\/IEMuYWNjZW50IDogQy5ib3JkZXIsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZCAuMnMnLCBmbGV4U2hyaW5rOiAwIH0gfSwga25vYik7CiAgY29uc3Qgcm93ID0gaCgnZGl2JywgewogICAgcm9sZTogJ3N3aXRjaCcsICdhcmlhLWNoZWNrZWQnOiBTdHJpbmcoc3RhdGUpLCAnYXJpYS1sYWJlbCc6IGxhYmVsLCB0YWJpbmRleDogJzAnLAogICAgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxNCwgY3Vyc29yOiAncG9pbnRlcicsIG1hcmdpblRvcDogNiwgb3V0bGluZU9mZnNldDogNCB9LAogIH0sIHRyYWNrLCBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5ib2R5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBDLnRleHQgfSB9LCBsYWJlbCksIHRpcCAmJiBJbmZvVGlwKHRpcCkpOwogIGNvbnN0IGZsaXAgPSAoKSA9PiB7CiAgICBzdGF0ZSA9ICFzdGF0ZTsKICAgIHRyYWNrLnN0eWxlLmJhY2tncm91bmQgPSBzdGF0ZSA\/IEMuYWNjZW50IDogQy5ib3JkZXI7CiAgICBrbm9iLnN0eWxlLmxlZnQgPSAoc3RhdGUgPyAyNyA6IDMpICsgJ3B4JzsKICAgIHJvdy5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsIFN0cmluZyhzdGF0ZSkpOwogICAgb25Ub2dnbGUoc3RhdGUpOwogIH07CiAgcm93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZmxpcCk7CiAgcm93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBlID0+IHsgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBmbGlwKCk7IH0gfSk7CiAgcmV0dXJuIHJvdzsKfQoKLyogQSByZXF1aXJlZCB5ZXMvbm8gZGVjaXNpb24uIFN0YXJ0cyBuZXV0cmFsICh2YWx1ZSA9PSBudWxsKTsgdGhlIHVzZXIgbXVzdAogICBwaWNrIGEgc2lkZSBiZWZvcmUgdGhlIGZsb3cgd2lsbCBsZXQgdGhlbSBjb250aW51ZSwgc28gbm8gc2lsZW50IGRlZmF1bHQgaXMKICAgYXNzdW1lZCBvbiB0aGVpciBiZWhhbGYuICovCmZ1bmN0aW9uIERlY2lzaW9uUm93KHsgdmFsdWUsIG9uQ2hhbmdlLCBsYWJlbCwgdGlwLCB5ZXNMYWJlbCA9ICdZZXMnLCBub0xhYmVsID0gJ05vJyB9KSB7CiAgbGV0IHYgPSB2YWx1ZTsKICBjb25zdCBzdHlsZSA9IHNlbGVjdGVkID0+ICh7CiAgICBmbGV4OiAnMSAxIDAnLCBwYWRkaW5nOiAnMTNweCAyMHB4JywgYm9yZGVyUmFkaXVzOiAxMiwgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRGYW1pbHk6ICdpbmhlcml0JywKICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3NlbGVjdGVkID8gQy5hY2NlbnQgOiBDLmJvcmRlcn1gLAogICAgYmFja2dyb3VuZDogc2VsZWN0ZWQgPyBDLmFjY2VudCA6IEMuc3VyZmFjZSwKICAgIGNvbG9yOiBzZWxlY3RlZCA\/ICcjZmZmJyA6IEMudGV4dE1pZCwgZm9udFdlaWdodDogNzAwLCBmb250U2l6ZTogRi5ib2R5LAogIH0pOwogIGNvbnN0IHllcyA9IGgoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicsIHJvbGU6ICdyYWRpbycsICdhcmlhLWNoZWNrZWQnOiBTdHJpbmcodiA9PT0gdHJ1ZSksIHN0eWxlOiBzdHlsZSh2ID09PSB0cnVlKSB9LCB5ZXNMYWJlbCk7CiAgY29uc3Qgbm8gPSBoKCdidXR0b24nLCB7IHR5cGU6ICdidXR0b24nLCByb2xlOiAncmFkaW8nLCAnYXJpYS1jaGVja2VkJzogU3RyaW5nKHYgPT09IGZhbHNlKSwgc3R5bGU6IHN0eWxlKHYgPT09IGZhbHNlKSB9LCBub0xhYmVsKTsKICBjb25zdCBoaW50ID0gaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW5Ub3A6IDEwLCBmb250U2l6ZTogRi50aW55LCBjb2xvcjogQy50ZXh0TXV0ZWQsIGRpc3BsYXk6IHYgPT0gbnVsbCA\/ICdibG9jaycgOiAnbm9uZScgfSB9LCAnQ2hvb3NlIFllcyBvciBObyB0byBjb250aW51ZS4nKTsKICBjb25zdCBwaWNrID0gbmV4dCA9PiB7CiAgICB2ID0gbmV4dDsKICAgIHNldFN0eWxlKHllcywgc3R5bGUodiA9PT0gdHJ1ZSkpOyB5ZXMuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCBTdHJpbmcodiA9PT0gdHJ1ZSkpOwogICAgc2V0U3R5bGUobm8sIHN0eWxlKHYgPT09IGZhbHNlKSk7IG5vLnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgU3RyaW5nKHYgPT09IGZhbHNlKSk7CiAgICBoaW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBvbkNoYW5nZSh2KTsKICB9OwogIHllcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBpY2sodHJ1ZSkpOwogIG5vLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcGljayhmYWxzZSkpOwogIHJldHVybiBoKCdkaXYnLCBudWxsLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEwLCBtYXJnaW5Cb3R0b206IDE0IH0gfSwKICAgICAgaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogQy50ZXh0IH0gfSwgbGFiZWwpLAogICAgICB0aXAgJiYgSW5mb1RpcCh0aXApKSwKICAgIGgoJ2RpdicsIHsgcm9sZTogJ3JhZGlvZ3JvdXAnLCAnYXJpYS1sYWJlbCc6IGxhYmVsLCBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTIgfSB9LCB5ZXMsIG5vKSwKICAgIGhpbnQpOwp9CgpmdW5jdGlvbiBTdGVwSW5kaWNhdG9yKHN0ZXBzLCBjdXJyZW50LCBvbkp1bXApIHsKICByZXR1cm4gaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTAsIG1hcmdpbkJvdHRvbTogMzYgfSB9LAogICAgLi4uc3RlcHMubWFwKChsYWJlbCwgaSkgPT4gewogICAgICBjb25zdCBhY3RpdmUgPSBjdXJyZW50ID09PSBpLCBkb25lID0gY3VycmVudCA+IGk7CiAgICAgIGNvbnN0IHNlZyA9IGgoJ2RpdicsIHsKICAgICAgICBzdHlsZTogeyBmbGV4OiAxLCBjdXJzb3I6IGRvbmUgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcgfSwKICAgICAgICByb2xlOiBkb25lID8gJ2J1dHRvbicgOiBudWxsLCB0YWJpbmRleDogZG9uZSA\/ICcwJyA6IG51bGwsCiAgICAgICAgJ2FyaWEtbGFiZWwnOiBkb25lID8gYEdvIGJhY2sgdG86ICR7bGFiZWx9YCA6IG51bGwsCiAgICAgICAgb25DbGljazogKCkgPT4geyBpZiAoZG9uZSkgb25KdW1wKGkpOyB9LAogICAgICAgIG9uS2V5ZG93bjogZSA9PiB7IGlmIChkb25lICYmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSkgeyBlLnByZXZlbnREZWZhdWx0KCk7IG9uSnVtcChpKTsgfSB9LAogICAgICB9LAogICAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgaGVpZ2h0OiA4LCBib3JkZXJSYWRpdXM6IDQsIGJhY2tncm91bmQ6IGFjdGl2ZSA\/IEMuYWNjZW50IDogZG9uZSA\/IEMuYWNjZW50ICsgJzYwJyA6IEMuYm9yZGVyLCB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZCAuNHMnIH0gfSksCiAgICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi50aW55LCBmb250V2VpZ2h0OiBhY3RpdmUgPyA3MDAgOiA1MDAsIG1hcmdpblRvcDogMTAsIGNvbG9yOiBhY3RpdmUgPyBDLmFjY2VudCA6IGRvbmUgPyBDLnRleHRNaWQgOiBDLnRleHRNdXRlZCwgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0sIGxhYmVsKSk7CiAgICAgIHJldHVybiBzZWc7CiAgICB9KSk7Cn0KCmNvbnN0IFNURVBfQ09OVEVYVCA9IFsKICB7IHRpdGxlOiAnV2h5IHRoaXMgbWF0dGVycycsIHRleHQ6ICdUaGUgc2l6ZSBvZiB5b3VyIGJhbmsgc2V0cyB0aGUgc2NhbGUgb2YgdGhlIG9wcG9ydHVuaXR5OiB0aGUgYWdlbmN5IHByZW1pdW0gZGlzcGxhY2VkIHdoZW4gd29yayBtb3ZlcyBvbnRvIHlvdXIgb3duIGJhbmsgaXMgdGhlIGNhc2ggc2F2aW5nLicgfSwKICB7IHRpdGxlOiAnV2h5IHRoaXMgbWF0dGVycycsIHRleHQ6ICdZb3VyIGZpbGwgcmF0ZSBzaG93cyBob3cgbXVjaCB0ZW1wb3Jhcnkgd29yayBpcyBwYWlkIGF0IGFuIGFnZW5jeSBwcmVtaXVtIHRvZGF5OyBiZXR0ZXIgYmFuayB1dGlsaXNhdGlvbiByZXR1cm5zIHBhcnQgb2YgdGhhdCBwcmVtaXVtIHRvIHlvdXIgYnVkZ2V0LicgfSwKICB7IHRpdGxlOiAnV2h5IHRoaXMgbWF0dGVycycsIHRleHQ6ICdTbWFydCBNYXRjaCBhdXRvbWF0ZXMgYm9va2luZyBhbmQgbWF0Y2hpbmcsIGhhbmRpbmcgYSBjb25zZXJ2YXRpdmUgc2xpY2Ugb2YgdGltZSBiYWNrIHRvIGVhY2ggdGVhbSBtZW1iZXIsIHNob3duIGFzIGhvdXJzIHBlciB3ZWVrIGFuZCB2YWx1ZWQgYXMgY2FzaC4nIH0sCiAgeyB0aXRsZTogJ1doeSB0aGlzIG1hdHRlcnMnLCB0ZXh0OiAnQ29uc2VydmF0aXZlIGlzIHRoZSBjYXV0aW91cyBjaG9pY2UsIE1vZGVyYXRlIG1hdGNoZXMgd2hhdCBvbmUgcGlsb3Qgc2l0ZSBhY2hpZXZlZCwgT3B0aW1pc3RpYyBhc3N1bWVzIG1vcmUuIEV2ZXJ5IGZpZ3VyZSBmbGV4ZXMgd2l0aCBpdC4nIH0sCl07CgpmdW5jdGlvbiBOYXZCdXR0b25zKHsgc3RlcCwgdG90YWxTdGVwcywgb25CYWNrLCBvbk5leHQsIG9uQ2FsY3VsYXRlLCBvbkhvbWUsIG5leHREaXNhYmxlZCA9IGZhbHNlIH0pIHsKICBpZiAoc3RlcCA+PSB0b3RhbFN0ZXBzIC0gMSkgcmV0dXJuIG51bGw7CiAgY29uc3QgY3R4ID0gU1RFUF9DT05URVhUW3N0ZXBdOwogIGNvbnN0IGZvcndhcmQgPSBzdGVwIDwgdG90YWxTdGVwcyAtIDIKICAgID8gaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgZGlzYWJsZWQ6IG5leHREaXNhYmxlZCwgc3R5bGU6IHsgcGFkZGluZzogJzE0cHggNDBweCcsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogJ25vbmUnLCBiYWNrZ3JvdW5kOiBuZXh0RGlzYWJsZWQgPyBDLmJvcmRlciA6IEMuYWNjZW50LCBjb2xvcjogbmV4dERpc2FibGVkID8gQy50ZXh0TXV0ZWQgOiAnI2ZmZicsIGZvbnRTaXplOiBGLmgzLCBmb250V2VpZ2h0OiA3MDAsIGN1cnNvcjogbmV4dERpc2FibGVkID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnIH0sIG9uQ2xpY2s6IG9uTmV4dCB9LCAnTmV4dCDihpInKQogICAgOiBoKCdidXR0b24nLCB7IHR5cGU6ICdidXR0b24nLCBzdHlsZTogeyBwYWRkaW5nOiAnMTRweCA0MHB4JywgYm9yZGVyUmFkaXVzOiAxNCwgYm9yZGVyOiAnbm9uZScsIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAke0MuYWNjZW50fSwgJHtDLmFjY2VudE1pZH0pYCwgY29sb3I6ICcjZmZmJywgZm9udFNpemU6IEYuaDMsIGZvbnRXZWlnaHQ6IDgwMCwgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRGYW1pbHk6ICdpbmhlcml0JywgYm94U2hhZG93OiAnMCA2cHggMjRweCByZ2JhKDE1LDY1LDcwLDAuMjUpJyB9LCBvbkNsaWNrOiBvbkNhbGN1bGF0ZSB9LCAnQ2FsY3VsYXRlIFJPSSDihpInKTsKCiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgYm9yZGVyVG9wOiBgMXB4IHNvbGlkICR7Qy5ib3JkZXJ9YCB9IH0sCiAgICBjdHggJiYgaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW46IGAxOHB4ICR7R1VUVEVSfSAwYCwgcGFkZGluZzogJzE0cHggMThweCcsIGJhY2tncm91bmQ6IGAke0MuYWNjZW50fTA4YCwgYm9yZGVyOiBgMXB4IHNvbGlkICR7Qy5hY2NlbnR9MjBgLCBib3JkZXJSYWRpdXM6IDE0LCBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTIsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9IH0sCiAgICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZsZXhTaHJpbms6IDAsIG1hcmdpblRvcDogMSB9IH0sIEljb24oJ2xpZ2h0YnVsYicsIDIwLCBDLmFjY2VudCkpLAogICAgICBoKCdkaXYnLCBudWxsLAogICAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYudGlueSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogQy5hY2NlbnQsIG1hcmdpbkJvdHRvbTogNCB9IH0sIGN0eC50aXRsZSksCiAgICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi50aW55LCBjb2xvcjogQy50ZXh0TWlkLCBsaW5lSGVpZ2h0OiAxLjYgfSB9LCBjdHgudGV4dCkpKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcGFkZGluZzogYDE0cHggJHtHVVRURVJ9IDM2cHhgLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTIsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBmbGV4V3JhcDogJ3dyYXAnIH0gfSwKICAgICAgc3RlcCA+IDAgJiYgaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgc3R5bGU6IHsgcGFkZGluZzogJzEzcHggMjZweCcsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYm9yZGVyfWAsIGJhY2tncm91bmQ6IEMuc3VyZmFjZSwgY29sb3I6IEMudGV4dE1pZCwgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNjAwLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnIH0sIG9uQ2xpY2s6IG9uQmFjayB9LCAn4oaQIEJhY2snKSwKICAgICAgc3RlcCA9PT0gMCAmJiBvbkhvbWUgJiYgaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgc3R5bGU6IHsgcGFkZGluZzogJzEycHggMjJweCcsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYm9yZGVyfWAsIGJhY2tncm91bmQ6IEMuc3VyZmFjZSwgY29sb3I6IEMudGV4dE1pZCwgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNjAwLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEwIH0sIG9uQ2xpY2s6IG9uSG9tZSB9LCBJY29uKCdob21lJywgMTgsIEMudGV4dE1pZCksICcgU3RhcnQgYWdhaW4nKSwKICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBmbGV4OiAxIH0gfSksCiAgICAgIGZvcndhcmQpKTsKfQoKLyogVGhlIGNvbGxhcHNpYmxlIG1ldGhvZG9sb2d5IHBhbmVsLiAqLwpmdW5jdGlvbiBDb2xsYXBzaWJsZSh0aXRsZSwgYm9keSkgewogIGxldCBvcGVuID0gZmFsc2U7CiAgY29uc3QgY2FyZXQgPSBoKCdzcGFuJywgeyBzdHlsZTogeyB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIC4ycycsIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snIH0gfSwgJ+KWticpOwogIGNvbnN0IHBhbmVsID0gaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW5Ub3A6IDE0LCBkaXNwbGF5OiAnbm9uZScgfSB9LCBib2R5KTsKICBjb25zdCBoZWFkID0gaCgnZGl2JywgewogICAgcm9sZTogJ2J1dHRvbicsIHRhYmluZGV4OiAnMCcsICdhcmlhLWV4cGFuZGVkJzogJ2ZhbHNlJywKICAgIHN0eWxlOiB7IGZvbnRTaXplOiBGLmJvZHksIGNvbG9yOiBDLmFjY2VudCwgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRXZWlnaHQ6IDcwMCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4LCBvdXRsaW5lT2Zmc2V0OiA0IH0sCiAgfSwgY2FyZXQsICcgJyArIHRpdGxlKTsKICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7CiAgICBvcGVuID0gIW9wZW47CiAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gb3BlbiA\/ICdibG9jaycgOiAnbm9uZSc7CiAgICBjYXJldC5zdHlsZS50cmFuc2Zvcm0gPSBvcGVuID8gJ3JvdGF0ZSg5MGRlZyknIDogJ25vbmUnOwogICAgaGVhZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBTdHJpbmcob3BlbikpOwogIH07CiAgaGVhZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZSk7CiAgaGVhZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB7IGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7IGUucHJldmVudERlZmF1bHQoKTsgdG9nZ2xlKCk7IH0gfSk7CiAgcmV0dXJuIGgoJ2RpdicsIG51bGwsIGhlYWQsIHBhbmVsKTsKfQoKLyogQSBsYWJlbC92YWx1ZSByb3cgaW4gdGhlIHdvcmtlZC1vdXQgYnJlYWtkb3ducy4gKi8KZnVuY3Rpb24gUm93KGxhYmVsLCB2YWx1ZSwgYWNjZW50KSB7CiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLCBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnLCBwYWRkaW5nOiAnMTBweCAwJywgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7Qy5ib3JkZXJ9YCwgZ2FwOiAxNiB9IH0sCiAgICBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE1pZCB9IH0sIGxhYmVsKSwKICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmJvZHksIGZvbnRXZWlnaHQ6IGFjY2VudCA\/IDgwMCA6IDYwMCwgY29sb3I6IGFjY2VudCA\/IEMuYWNjZW50IDogQy50ZXh0LCB0ZXh0QWxpZ246ICdyaWdodCcsIHdoaXRlU3BhY2U6ICdub3dyYXAnIH0gfSwgdmFsdWUpKTsKfQoKZnVuY3Rpb24gQ1RpdGxlKGljb25LZXksIHRleHQsIGNvbG9yKSB7CiAgcmV0dXJuIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogQy50ZXh0TWlkLCBtYXJnaW5Cb3R0b206IDE2LCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEwIH0gfSwKICAgIGljb25LZXkgJiYgSWNvbihpY29uS2V5LCAyNCwgY29sb3IgfHwgQy5hY2NlbnQpLCAnICcsIHRleHQpOwp9CgovKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgdmFuaWxsYS9zdGVwcy5qcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFRoZSBmb3VyIGlucHV0IHNjcmVlbnMsIHBvcnRlZCBmcm9tIHRoZSBSZWFjdCBidWlsZCdzIHN0ZXBzL2luZGV4LmpzeC4KCiAgIENvcHkgZGlzY2lwbGluZSBpcyB1bmNoYW5nZWQ6IG9uZSBqb2IgcGVyIGVsZW1lbnQsIGEgb25lLWxpbmUgbGVhZAogICBxdWVzdGlvbiwgdGhlIGNvbnRyb2wsIG9uZSBsaW5lIG9mIGZpbmUgcHJpbnQuIEFsbCBkZXRhaWwgYW5kIGNhdmVhdHMgbGl2ZQogICBpbiB0aGUgKGkpIHRvb2x0aXBzIGFuZCBhcmUgbmV2ZXIgcmVwZWF0ZWQgb24gc2NyZWVuLgogICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi8vIFNURVAgMC4gWW91ciBiYW5rIHJlZ2lzdGVyOiB0aGUgc2luZ2xlIGlucHV0OyBhZ2VuY3kgc3BlbmQgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBzY2FsZSBmcm9tIGl0LgpmdW5jdGlvbiBCYW5rU3RlcChzdGF0ZSwgc2V0KSB7CiAgY29uc3QgYmFzZUhyID0gKFNJTVBMRV9CTEVOREVEX0JBTktfUEFZIC8gQUZDX0RJVklTT1IpLnRvRml4ZWQoMik7CiAgY29uc3QgYWxsSW5IciA9ICgoU0lNUExFX0JMRU5ERURfQkFOS19QQVkgLyBBRkNfRElWSVNPUikgKiAoMSArIEJBTktfT05DT1NUKSkudG9GaXhlZCgyKTsKICBjb25zdCBmZWUgPSBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLmFjY2VudCB9IH0sIGAke2ZtdChwbGF0Zm9ybUNvc3RGb3Ioc3RhdGUuYmFua1Bvb2wpKX0veXJgKTsKCiAgcmV0dXJuIGgoJ2RpdicsIG51bGwsCiAgICBTZWN0aW9uVGl0bGUoMSwgJ1lvdXIgYmFuayByZWdpc3RlcicpLAogICAgTGVhZCgnSG93IG1hbnkgd29ya2VycyBhcmUgb24geW91ciBiYW5rIHJlZ2lzdGVyIGluIE9wdGltYT8gVGhlc2UgYXJlIHRoZSBwZW9wbGUgeW91IGNhbiBvZmZlciB0ZW1wb3Jhcnkgc2hpZnRzIHRvIGJlZm9yZSB0dXJuaW5nIHRvIGFuIGFnZW5jeS4nKSwKICAgIENhcmQoe30sCiAgICAgIFRvdWNoU2xpZGVyKHsKICAgICAgICBsYWJlbDogJ1JlZ2lzdGVyZWQgYmFuayB3b3JrZXJzJywKICAgICAgICB2YWx1ZTogc3RhdGUuYmFua1Bvb2wsIG1pbjogQkFOS19NSU4sIG1heDogQkFOS19NQVgsIHNjYWxlOiBiYW5rU2NhbGUsIGZvcm1hdDogZm10TnVtLAogICAgICAgIG9uQ2hhbmdlOiB2ID0+IHsgc2V0KCdiYW5rUG9vbCcsIHYpOyBmZWUudGV4dENvbnRlbnQgPSBgJHtmbXQocGxhdGZvcm1Db3N0Rm9yKHYpKX0veXJgOyB9LAogICAgICAgIHRpcDogJ0V2ZXJ5b25lIG9uIHlvdXIgYmFuayByZWdpc3RlciwgSU5DTFVESU5HIHN1YnN0YW50aXZlIHN0YWZmIHdobyBhbHNvIHBpY2sgdXAgYmFuayBzaGlmdHMsIG5vdCBqdXN0IGRlZGljYXRlZCBiYW5rLW9ubHkgd29ya2Vycy4gQ291bnRpbmcgb25seSBiYW5rLW9ubHkgd29ya2VycyB3b3VsZCB1bmRlcnN0YXRlIHRoZSBvcHBvcnR1bml0eS4gQSByb3VnaCBmaWd1cmUgaXMgZmluZS4nLAogICAgICB9KSwKICAgICAgSGVscGVyKCdTbGlkZSB0byBhZGp1c3QgeW91ciBudW1iZXIgb2YgYmFuayBzdGFmZiB3aG8gdXNlIE9wdGltYS4gQmV0dGVyIHV0aWxpc2F0aW9uIG9mIHRoaXMgcG9vbCBpcyB0aGUgbWVjaGFuaXNtIHRoYXQgZGlzcGxhY2VzIGV4cGVuc2l2ZSBhZ2VuY3kgc3BlbmQuJyksCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAxNiwgcGFkZGluZzogJzE0cHggMThweCcsIGJhY2tncm91bmQ6IEMuYWNjZW50U29mdCwgYm9yZGVyUmFkaXVzOiAxMiwgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHRNaWQsIGxpbmVIZWlnaHQ6IDEuNSwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwKICAgICAgICBoKCdzcGFuJywgbnVsbCwgJ0JhbmtTdGFmZisgbGljZW5jZSBhdCB0aGlzIHNpemU6ICcsIGZlZSksCiAgICAgICAgSW5mb1RpcCgnU21hcnQgTWF0Y2ggbGljZW5jZSBwcmljaW5nLCBleCBWQVQsIGJhbmRlZCBieSB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgb24geW91ciBiYW5rIHJlZ2lzdGVyLiBZb3VyIHJldHVybiBhbmQgcGF5YmFjayBmaWd1cmVzIGFyZSBtZWFzdXJlZCBhZ2FpbnN0IHRoaXMgYW5udWFsIGZlZS4nKSksCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAxMCwgZm9udFNpemU6IEYudGlueSwgY29sb3I6IEMudGV4dE11dGVkLCBsaW5lSGVpZ2h0OiAxLjUsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogOCB9IH0sCiAgICAgICAgaCgnc3BhbicsIG51bGwsIGBTaGlmdCBjb3N0czogMjAyNi8yNyBOSFMgQWdlbmRhIGZvciBDaGFuZ2UgYmFuZC1taXggKH7CoyR7TWF0aC5yb3VuZChTSU1QTEVfQkxFTkRFRF9CQU5LX1BBWSAvIDEwMDApfWsgYmxlbmRlZCksICR7TWF0aC5yb3VuZChCQU5LX09OQ09TVCAqIDEwMCl9JSBlbXBsb3llciBvbi1jb3N0IGluY2x1ZGVkLmApLAogICAgICAgIEluZm9UaXAoYEJhc2UgQWdlbmRhIGZvciBDaGFuZ2UgcGF5IG9mIMKjJHtiYXNlSHJ9L2hyIHBsdXMgYSAke01hdGgucm91bmQoQkFOS19PTkNPU1QgKiAxMDApfSUgZW1wbG95ZXIgb24tY29zdCAoZW1wbG95ZXIgTmF0aW9uYWwgSW5zdXJhbmNlIGFuZCBwZW5zaW9uKSBnaXZlcyDCoyR7YWxsSW5Icn0vaHIgYWxsLWluLiAke01hdGgucm91bmQoQkFOS19PTkNPU1QgKiAxMDApfSUgc2l0cyBiZWxvdyB0aGUgZnVsbCB+MzAlIE5IUyBlbXBsb3llciByYXRlIGJlY2F1c2UgYmFuay1vbmx5IHdvcmtlcnMgb2Z0ZW4gb3B0IG91dCBvZiB0aGUgcGVuc2lvbi4gT24tY29zdHMgY2hhbmdlIHRoZSBtb2RlbGxlZCBzaGlmdCBjb3VudHMsIG5vdCB0aGUgY2FzaCBzYXZpbmcsIGFuZCBhcmUgY291bnRlZCBvbmNlLCBuZXZlciBhZGRlZCBhZ2Fpbi5gKSkpKTsKfQoKLy8gU1RFUCAxLiBBZ2VuY3k6IGN1cnJlbnQgYWdlbmN5IGZpbGwgcmF0ZSAlLCBwbHVzIGFuIG9wdGlvbmFsIGFjdHVhbC1hZ2VuY3ktc3BlbmQgb3ZlcnJpZGUuCmZ1bmN0aW9uIEFnZW5jeVN0ZXAoc3RhdGUsIHNldCkgewogIGNvbnN0IGVzdGltYXRlID0gTWF0aC5yb3VuZChzdGF0ZS5iYW5rUG9vbCAqIEFHRU5DWV9TUEVORF9QRVJfUkVHSVNURVJFRF9CQU5LX1dPUktFUl9HQlApOwogIGNvbnN0IGZtdE0gPSB2ID0+IHYgPj0gMTAwMDAwMCA\/IGDCoyR7KHYgLyAxMDAwMDAwID49IDEwMCA\/ICh2IC8gMTAwMDAwMCkudG9GaXhlZCgwKSA6ICh2IC8gMTAwMDAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cLjAkLywgJycpKX1tYCA6IGZtdCh2KTsKICAvLyBTbGlkZXIgcmFuZ2UgYWRhcHRzIHRvIHRoZSBiYW5rLXNpemUgZXN0aW1hdGUsIHNvIHRoZSBjb250cm9sIGtlZXBzIGdvb2QKICAvLyByZXNvbHV0aW9uIGZvciBhIHNtYWxsIGNvbW11bml0eSB0cnVzdCAofsKjMm0pIG9yIGEgbGFyZ2UgSUNTICh+wqMzMG0pIGFsaWtlLAogIC8vIGNhcHBlZCBhdCDCozUwbSBmb3IgdGhlIHZlcnkgbGFyZ2VzdCBUcnVzdHMgKHR5cGUgYSBoaWdoZXIgZmlndXJlIGlmIG5lZWRlZCkuCiAgLy8gQ2FwcGVkIGF0IMKjNTBtIHNvIHRoZSBjb250cm9sIGtlZXBzIHJlc29sdXRpb24gZm9yIG9yZGluYXJ5IHRydXN0cywgZXhjZXB0CiAgLy8gdGhhdCBpdCBtdXN0IGFsd2F5cyBjbGVhciB0aGUgZXN0aW1hdGUgaXRzZWxmOiBhdCB0aGUgdG9wIG9mIHRoZSBwcmljZSBsaXN0CiAgLy8gKDEwMCwwMDAgd29ya2VycykgfsKjMiw3MDAgYSB3b3JrZXIgcHV0cyB0aGF0IGVzdGltYXRlIGF0IMKjMjcwbSwgYW5kIGEgc2xpZGVyCiAgLy8gdGhhdCBzdG9wcGVkIGF0IMKjNTBtIHdvdWxkIHNpbGVudGx5IHBpbiB0aGUgdGh1bWIgYXQgaXRzIG1heGltdW0uCiAgY29uc3Qgd2FudCA9IE1hdGgubWF4KGVzdGltYXRlICogMS41LCBNYXRoLm1pbihlc3RpbWF0ZSAqIDMsIDUwMDAwMDAwKSk7CiAgY29uc3Qgc2xpZGVyTWF4ID0gTWF0aC5tYXgoMTAwMDAwMDAsIE1hdGguY2VpbCh3YW50IC8gNTAwMDAwMCkgKiA1MDAwMDAwKTsKICBjb25zdCBzbGlkZXJTdGVwID0gTWF0aC5tYXgoMTAwMDAwLCBNYXRoLnJvdW5kKHNsaWRlck1heCAvIDIwMCAvIDEwMDAwMCkgKiAxMDAwMDApOwoKICBjb25zdCBwYW5lbCA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAyNCwgcGFkZGluZzogJzE4cHggMjJweCcsIGJhY2tncm91bmQ6IEMuc3VyZmFjZTIsIGJvcmRlclJhZGl1czogMTYsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYWNjZW50fTU1YCB9IH0pOwoKICAvKiBUaGUgb3ZlcnJpZGUgYXJlYSBpcyByZWJ1aWx0IHdoZW5ldmVyIHRoZSB0b2dnbGUgZmxpcHM6IG9mZiBzaG93cyB0aGUKICAgICBlc3RpbWF0ZSB3ZSB3b3VsZCB1c2UsIG9uIHNob3dzIGEgdGV4dCBmaWVsZCBhbmQgYSBzbGlkZXIgdGhhdCBzdGF5IGluCiAgICAgc3RlcCB3aXRoIGVhY2ggb3RoZXIuICovCiAgY29uc3QgcmVuZGVyT3ZlcnJpZGUgPSAoKSA9PiB7CiAgICBjb25zdCBrbm93biA9IHN0YXRlLmFnZW5jeVNwZW5kICE9IG51bGw7CiAgICBjb25zdCBib2R5ID0gaCgnZGl2JywgbnVsbCk7CiAgICBpZiAoIWtub3duKSB7CiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoSGVscGVyKCdXZSBjdXJyZW50bHkgZXN0aW1hdGUgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy5hY2NlbnQgfSB9LCBgJHtmbXRNKGVzdGltYXRlKX0veXJgKSwgJyBmcm9tIHlvdXIgYmFuayBzaXplLiBUb2dnbGUgb24gdG8gdXNlIHlvdXIgb3duIGZpZ3VyZS4nKSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBiaWcgPSBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMiwgZm9udFdlaWdodDogODAwLCBjb2xvcjogQy5hY2NlbnQgfSB9LCBmbXRNKHN0YXRlLmFnZW5jeVNwZW5kKSk7CiAgICAgIGNvbnN0IGZpZWxkID0gaCgnaW5wdXQnLCB7CiAgICAgICAgdHlwZTogJ3RleHQnLCBpbnB1dG1vZGU6ICdudW1lcmljJywgdmFsdWU6IHN0YXRlLmFnZW5jeVNwZW5kLnRvTG9jYWxlU3RyaW5nKCdlbi1HQicpLAogICAgICAgICdhcmlhLWxhYmVsJzogJ1lvdXIgdG90YWwgYW5udWFsIGFnZW5jeSBzcGVuZCBpbiBwb3VuZHMnLAogICAgICAgIHN0eWxlOiB7IGZsZXg6ICcxIDEgMTYwcHgnLCBtYXhXaWR0aDogMjQwLCBwYWRkaW5nOiAnMTJweCAxNHB4JywgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNzAwLCBib3JkZXJSYWRpdXM6IDEyLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlcn1gLCBmb250RmFtaWx5OiAnaW5oZXJpdCcsIGNvbG9yOiBDLnRleHQsIGJhY2tncm91bmQ6ICcjZmZmJyB9LAogICAgICB9KTsKICAgICAgY29uc3Qgc2xpZGVyID0gaCgnaW5wdXQnLCB7CiAgICAgICAgdHlwZTogJ3JhbmdlJywgbWluOiAwLCBtYXg6IHNsaWRlck1heCwgc3RlcDogc2xpZGVyU3RlcCwgdmFsdWU6IE1hdGgubWluKHN0YXRlLmFnZW5jeVNwZW5kLCBzbGlkZXJNYXgpLAogICAgICAgICdhcmlhLWxhYmVsJzogJ1NldCB5b3VyIGFubnVhbCBhZ2VuY3kgc3BlbmQgd2l0aCB0aGUgc2xpZGVyJywKICAgICAgICBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBjdXJzb3I6ICdwb2ludGVyJywgYWNjZW50Q29sb3I6IEMuYWNjZW50IH0sCiAgICAgIH0pOwogICAgICBjb25zdCBzeW5jID0gdiA9PiB7IHNldCgnYWdlbmN5U3BlbmQnLCB2KTsgYmlnLnRleHRDb250ZW50ID0gZm10TSh2KTsgfTsKICAgICAgZmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBlID0+IHsKICAgICAgICBjb25zdCByYXcgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9bXlxkXS9nLCAnJyk7CiAgICAgICAgY29uc3QgdiA9IHJhdyA9PT0gJycgPyAwIDogTWF0aC5taW4oOTk5OTk5OTk5LCBOdW1iZXIocmF3KSk7CiAgICAgICAgZmllbGQudmFsdWUgPSB2LnRvTG9jYWxlU3RyaW5nKCdlbi1HQicpOwogICAgICAgIHNsaWRlci52YWx1ZSA9IE1hdGgubWluKHYsIHNsaWRlck1heCk7CiAgICAgICAgc3luYyh2KTsKICAgICAgfSk7CiAgICAgIHNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4gewogICAgICAgIGNvbnN0IHYgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpOwogICAgICAgIGZpZWxkLnZhbHVlID0gdi50b0xvY2FsZVN0cmluZygnZW4tR0InKTsKICAgICAgICBzeW5jKHYpOwogICAgICB9KTsKICAgICAgYm9keS5hcHBlbmRDaGlsZChoKCdkaXYnLCB7IHN0eWxlOiB7IG1hcmdpblRvcDogMTYgfSB9LAogICAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZ2FwOiAxMCwgbWFyZ2luQm90dG9tOiAxMiB9IH0sCiAgICAgICAgICBoKCdzcGFuJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogQy50ZXh0TWlkIH0gfSwgJ1lvdXIgdG90YWwgYW5udWFsIGFnZW5jeSBzcGVuZCcpLCBiaWcpLAogICAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4LCBtYXJnaW5Cb3R0b206IDE2IH0gfSwKICAgICAgICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmgzLCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBDLmFjY2VudCB9IH0sICfCoycpLCBmaWVsZCwKICAgICAgICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0TXV0ZWQgfSB9LCAnLyB5cicpKSwKICAgICAgICBzbGlkZXIsCiAgICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGZvbnRTaXplOiBGLnRpbnksIGNvbG9yOiBDLnRleHRNdXRlZCwgbWFyZ2luVG9wOiA2IH0gfSwKICAgICAgICAgIGgoJ3NwYW4nLCBudWxsLCAnwqMwJyksIGgoJ3NwYW4nLCBudWxsLCAnZHJhZyB0byBzZXQsIG9yIHR5cGUgYW4gZXhhY3QgZmlndXJlIGFib3ZlJyksIGgoJ3NwYW4nLCBudWxsLCBgJHtmbXRNKHNsaWRlck1heCl9K2ApKSwKICAgICAgICBIZWxwZXIoYFRoaXMgZmlndXJlIGFuY2hvcnMgeW91ciBjYXNoIHNhdmluZzsgdGhlIGZpbGwgcmF0ZSBhYm92ZSBvbmx5IHNoYXBlcyB0aGUgcmVsaWFuY2UgbmFycmF0aXZlLiBFc3RpbWF0ZSBhdCB5b3VyIGJhbmsgc2l6ZSB3YXMgJHtmbXRNKGVzdGltYXRlKX0veXIuYCkpKTsKICAgIH0KICAgIHJldHVybiBib2R5OwogIH07CgogIGxldCBvdmVycmlkZSA9IHJlbmRlck92ZXJyaWRlKCk7CiAgcGFuZWwuYXBwZW5kQ2hpbGQoVG9nZ2xlUm93KHsKICAgIG9uOiBzdGF0ZS5hZ2VuY3lTcGVuZCAhPSBudWxsLAogICAgbGFiZWw6ICdJIGtub3cgb3VyIGFubnVhbCBhZ2VuY3kgc3BlbmQnLAogICAgdGlwOiAnWW91ciB0b3RhbCBhbm51YWwgYWdlbmN5IHN0YWZmaW5nIHNwZW5kIGFjcm9zcyB0aGUgcm9sZXMgeW91ciBiYW5rIHJlZ2lzdGVyIGNvdmVycyAoYWxsIHN0YWZmIGdyb3Vwcywgd2hvbGUgcmVnaXN0ZXIsIG5vdCBiYW5rLW9ubHkpLiBUaGlzIGlzIHRoZSBhbmNob3IgZm9yIHRoZSBjYXNoIHNhdmluZywgc28gYSByZWFsIGZpZ3VyZSBtYWtlcyB0aGUgcmVzdWx0IGZhciBtb3JlIGFjY3VyYXRlLiBMZWF2ZSBvZmYgYW5kIHdlIGVzdGltYXRlIGl0IGZyb20geW91ciBiYW5rIHNpemUgYXQgfsKjMiw3MDAgcGVyIHJlZ2lzdGVyZWQgd29ya2VyLicsCiAgICBvblRvZ2dsZTogb24gPT4gewogICAgICBzZXQoJ2FnZW5jeVNwZW5kJywgb24gPyBlc3RpbWF0ZSA6IG51bGwpOwogICAgICBjb25zdCBuZXh0ID0gcmVuZGVyT3ZlcnJpZGUoKTsKICAgICAgcGFuZWwucmVwbGFjZUNoaWxkKG5leHQsIG92ZXJyaWRlKTsKICAgICAgb3ZlcnJpZGUgPSBuZXh0OwogICAgfSwKICB9KSk7CiAgcGFuZWwuYXBwZW5kQ2hpbGQob3ZlcnJpZGUpOwoKICByZXR1cm4gaCgnZGl2JywgbnVsbCwKICAgIFNlY3Rpb25UaXRsZSgyLCAnQWdlbmN5IHJlbGlhbmNlJyksCiAgICBMZWFkKCdXaGF0IHNoYXJlIG9mIHlvdXIgdGVtcG9yYXJ5IGR1dGllcyBjdXJyZW50bHkgZ29lcyB0byBhZ2VuY3kgcmF0aGVyIHRoYW4geW91ciBvd24gYmFuaz8nKSwKICAgIENhcmQoe30sCiAgICAgIFRvdWNoU2xpZGVyKHsKICAgICAgICBsYWJlbDogJ0N1cnJlbnQgYWdlbmN5IGZpbGwgcmF0ZScsCiAgICAgICAgdmFsdWU6IHN0YXRlLmFnZW5jeUZpbGxSYXRlLCBtaW46IDAsIG1heDogMzAsIHN0ZXA6IDAuMSwKICAgICAgICBmb3JtYXQ6IHYgPT4gYCR7TWF0aC5yb3VuZCh2ICogMTApIC8gMTB9JWAsCiAgICAgICAgb25DaGFuZ2U6IHYgPT4gc2V0KCdhZ2VuY3lGaWxsUmF0ZScsIHYpLAogICAgICAgIHRpcDogJ1RoZSBwcm9wb3J0aW9uIG9mIHRlbXBvcmFyeSBzaGlmdHMgZmlsbGVkIGJ5IGFnZW5jeSBzdGFmZi4gVGhpcyBkcml2ZXMgdGhlIGFnZW5jeS1yZWxpYW5jZSByZWR1Y3Rpb24gc2hvd24gb24geW91ciByZXN1bHRzICh0aGUgY2FzaCBzYXZpbmcgaXMgYW5jaG9yZWQgdG8geW91ciBhZ2VuY3kgc3BlbmQsIHByZW1pdW0gYW5kIGNvbmZpZGVuY2UgbGV2ZWwsIG5vdCB0byB0aGlzIHJhdGUpLiBEZWZhdWx0cyB0byA4LjMlLCB0aGUgbmF0aW9uYWwgYXZlcmFnZSBkcmF3biBmcm9tIFJMRGF0aXggZGF0YS4nLAogICAgICB9KSwKICAgICAgSGVscGVyKCdUaGUgZGVmYXVsdCA4LjMlIGlzIHRoZSBuYXRpb25hbCBhdmVyYWdlOyBzZXQgeW91ciBvd24gaWYgeW91IGtub3cgaXQuJyksCiAgICAgIHBhbmVsKSk7Cn0KCi8vIFNURVAgMi4gWW91ciB0ZWFtOiBzaXplIG9mIHRoZSB0ZW1wb3Jhcnkgc3RhZmZpbmcgdGVhbS4KZnVuY3Rpb24gVGVhbVN0ZXAoc3RhdGUsIHNldCkgewogIHJldHVybiBoKCdkaXYnLCBudWxsLAogICAgU2VjdGlvblRpdGxlKDMsICdZb3VyIHRlbXBvcmFyeSBzdGFmZmluZyB0ZWFtJyksCiAgICBMZWFkKCdIb3cgbWFueSBwZW9wbGUgYm9vaywgY2hhc2UgYW5kIHJlY29uY2lsZSB0ZW1wb3Jhcnkgc2hpZnRzIGRheSB0byBkYXk\/IFRoaXMgc2V0cyB0aGUgImhvdXJzIHJlbGVhc2VkIGVhY2ggd2VlayIgZmlndXJlIG9uIHlvdXIgcmVzdWx0cy4nKSwKICAgIENhcmQoe30sCiAgICAgIFN0ZXBwZXIoewogICAgICAgIGxhYmVsOiAnVGVtcG9yYXJ5IHN0YWZmaW5nIHRlYW0nLAogICAgICAgIHZhbHVlOiBzdGF0ZS5udW1NYW5hZ2VycywgbWluOiAwLCBtYXg6IDYwLCBzdGVwOiAxLAogICAgICAgIG9uQ2hhbmdlOiB2ID0+IHNldCgnbnVtTWFuYWdlcnMnLCB2KSwKICAgICAgICB0aXA6ICJDb3VudCB0aGUgcGVvcGxlIHdobyBkbyB0aGUgZGF5LXRvLWRheSBib29raW5nLCBjaGFzaW5nIGFuZCByZWNvbmNpbGluZyBvZiB0ZW1wb3Jhcnkgc2hpZnRzOiB5b3VyIGJhbmsgLyB0ZW1wb3Jhcnkgc3RhZmZpbmcgY29vcmRpbmF0b3JzLCBvZmZpY2VycyBhbmQgYWRtaW5pc3RyYXRvcnMuIE1hbmFnZXJzIHdobyBkb24ndCBkbyB0aGUgZGF5LXRvLWRheSBlbnRyeSBhcmVuJ3QgY291bnRlZC4iLAogICAgICB9KSwKICAgICAgSGVscGVyKCdDb3VudCBjb29yZGluYXRvcnMsIG9mZmljZXJzIGFuZCBhZG1pbmlzdHJhdG9ycywgbm90IHRoZSBtYW5hZ2VycyBhYm92ZSB0aGVtLicpLAogICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IG1hcmdpblRvcDogMjQsIHBhZGRpbmc6ICcxOHB4IDIycHgnLCBiYWNrZ3JvdW5kOiBDLnN1cmZhY2UyLCBib3JkZXJSYWRpdXM6IDE2LCBib3JkZXI6IGAxcHggc29saWQgJHtDLmFjY2VudH01NWAgfSB9LAogICAgICAgIERlY2lzaW9uUm93KHsKICAgICAgICAgIHZhbHVlOiBzdGF0ZS5pbmNsdWRlQWRtaW4sCiAgICAgICAgICBvbkNoYW5nZTogdiA9PiBzZXQoJ2luY2x1ZGVBZG1pbicsIHYpLAogICAgICAgICAgbGFiZWw6ICdBbHNvIGFkZCB0aGlzIHJlY292ZXJlZCB0aW1lIHRvIHRoZSBjYXNoIHNhdmluZz8nLAogICAgICAgICAgeWVzTGFiZWw6ICdZZXMsIGFkZCBpdCcsCiAgICAgICAgICBub0xhYmVsOiAnTm8sIHNob3cgc2VwYXJhdGVseScsCiAgICAgICAgICB0aXA6ICdBIHNlY29uZGFyeSBjaG9pY2UuIFBpY2sgWWVzIHRvIHZhbHVlIHRoZSB0ZWFtXCdzIHJlY292ZXJlZCB0aW1lIChhIGNvbnNlcnZhdGl2ZSAxLjAgaC9kYXkgYXQgYSBsb2FkZWQgwqMxOC9oKSBhbmQgYWRkIGl0IHRvIHRoZSBoZWFkbGluZSBjYXNoIHNhdmluZzsgcGljayBObyB0byBrZWVwIGl0IHNob3duIHNlcGFyYXRlbHkuIEVpdGhlciB3YXksIHRoZSBob3VycyByZWxlYXNlZCBzdGlsbCBzaG93IG9uIHlvdXIgcmVzdWx0cy4nLAogICAgICAgIH0pKSkpOwp9CgovLyBTVEVQIDMuIENvbmZpZGVuY2U6IHRoZSBtb2RlbGxpbmcgc3RhbmNlLCBzZXQgdXBmcm9udCBhbmQgZWRpdGFibGUgYWdhaW4gb24gUmVzdWx0cy4KZnVuY3Rpb24gU3RhbmNlU3RlcChzdGF0ZSwgc2V0KSB7CiAgY29uc3QgcGN0ID0gaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuaDEsIGZvbnRXZWlnaHQ6IDgwMCwgY29sb3I6IEMuYWNjZW50IH0gfSwgYCR7c3RhdGUuZGlzcGxhY2VtZW50fSVgKTsKICBjb25zdCBub3RlVGl0bGUgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmJvZHksIGZvbnRXZWlnaHQ6IDgwMCwgY29sb3I6IEMuYWNjZW50LCBtYXJnaW5Cb3R0b206IDYgfSB9KTsKICBjb25zdCBub3RlQm9keSA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHRNaWQsIGxpbmVIZWlnaHQ6IDEuNiB9IH0pOwogIGNvbnN0IG5vdGVCb3ggPSBoKCdkaXYnLCB7IHN0eWxlOiB7IG1hcmdpblRvcDogMjAsIHBhZGRpbmc6ICcxOHB4IDIycHgnLCBiYWNrZ3JvdW5kOiBDLmFjY2VudFNvZnQsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYWNjZW50fTMwYCwgZGlzcGxheTogc3RhdGUuc3RhbmNlVG91Y2hlZCA\/ICdibG9jaycgOiAnbm9uZScgfSB9LCBub3RlVGl0bGUsIG5vdGVCb2R5KTsKCiAgY29uc3QgcHJlc2V0cyA9IFtbJ0NvbnNlcnZhdGl2ZScsIDEzXSwgWydNb2RlcmF0ZScsIDI2XSwgWydPcHRpbWlzdGljJywgNTBdXTsKICBjb25zdCBidG5TdHlsZSA9IG9uID0+ICh7CiAgICBmbGV4OiAxLCBwYWRkaW5nOiAnMjBweCA4cHgnLCBib3JkZXJSYWRpdXM6IDE0LCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnLAogICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7b24gPyBDLmFjY2VudCA6IEMuYm9yZGVyfWAsIGJhY2tncm91bmQ6IG9uID8gQy5hY2NlbnQgOiBDLnN1cmZhY2UyLAogICAgY29sb3I6IG9uID8gJyNmZmYnIDogQy50ZXh0TWlkLCBmb250V2VpZ2h0OiA3MDAsIGZvbnRTaXplOiBGLmJvZHksCiAgICBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDQsIGFsaWduSXRlbXM6ICdjZW50ZXInLAogIH0pOwogIGNvbnN0IGJ1dHRvbnMgPSBwcmVzZXRzLm1hcCgoW2xibCwgdl0pID0+IGgoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicsIHN0eWxlOiBidG5TdHlsZShzdGF0ZS5zdGFuY2VUb3VjaGVkICYmIHN0YXRlLmRpc3BsYWNlbWVudCA9PT0gdikgfSwKICAgIGxibCwgaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuc21hbGwsIGZvbnRXZWlnaHQ6IDYwMCwgb3BhY2l0eTogMC44IH0gfSwgYCR7dn0lYCkpKTsKICBjb25zdCBzbGlkZXIgPSBoKCdpbnB1dCcsIHsKICAgIHR5cGU6ICdyYW5nZScsICdhcmlhLWxhYmVsJzogJ0FnZW5jeSB3b3JrIG1vdmVkIHRvIHlvdXIgYmFuayAoJSknLCBtaW46IDEzLCBtYXg6IDUwLCBzdGVwOiAxLCB2YWx1ZTogc3RhdGUuZGlzcGxhY2VtZW50LAogICAgJ2FyaWEtdmFsdWV0ZXh0JzogYCR7c3RhdGUuZGlzcGxhY2VtZW50fSUgKCR7c3RhbmNlKHN0YXRlLmRpc3BsYWNlbWVudCkua2V5fSlgLAogICAgc3R5bGU6IHsgd2lkdGg6ICcxMDAlJywgY3Vyc29yOiAncG9pbnRlcicsIGFjY2VudENvbG9yOiBDLmFjY2VudCB9LAogIH0pOwoKICBjb25zdCByZWZyZXNoID0gdiA9PiB7CiAgICBzZXQoJ2Rpc3BsYWNlbWVudCcsIHYpOwogICAgc2V0KCdzdGFuY2VUb3VjaGVkJywgdHJ1ZSk7CiAgICBwY3QudGV4dENvbnRlbnQgPSBgJHt2fSVgOwogICAgc2xpZGVyLnZhbHVlID0gdjsKICAgIHNsaWRlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWV0ZXh0JywgYCR7dn0lICgke3N0YW5jZSh2KS5rZXl9KWApOwogICAgcHJlc2V0cy5mb3JFYWNoKChbLCBwdl0sIGkpID0+IHNldFN0eWxlKGJ1dHRvbnNbaV0sIGJ0blN0eWxlKHN0YXRlLmRpc3BsYWNlbWVudCA9PT0gcHYpKSk7CiAgICBjb25zdCBzdCA9IHN0YW5jZSh2KTsKICAgIG5vdGVUaXRsZS50ZXh0Q29udGVudCA9IHN0LmtleTsKICAgIG5vdGVCb2R5LnRleHRDb250ZW50ID0gc3Qubm90ZTsKICAgIG5vdGVCb3guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgfTsKICBwcmVzZXRzLmZvckVhY2goKFssIHZdLCBpKSA9PiBidXR0b25zW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcmVmcmVzaCh2KSkpOwogIHNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4gcmVmcmVzaChOdW1iZXIoZS50YXJnZXQudmFsdWUpKSk7CiAgaWYgKHN0YXRlLnN0YW5jZVRvdWNoZWQpIHsgY29uc3Qgc3QgPSBzdGFuY2Uoc3RhdGUuZGlzcGxhY2VtZW50KTsgbm90ZVRpdGxlLnRleHRDb250ZW50ID0gc3Qua2V5OyBub3RlQm9keS50ZXh0Q29udGVudCA9IHN0Lm5vdGU7IH0KCiAgcmV0dXJuIGgoJ2RpdicsIG51bGwsCiAgICBTZWN0aW9uVGl0bGUoNCwgJ1lvdXIgY29uZmlkZW5jZSBsZXZlbCcpLAogICAgTGVhZCgiSG93IG11Y2ggb2YgdG9kYXkncyBhZ2VuY3kgd29yayBkbyB5b3UgZXhwZWN0IHRvIG1vdmUgdG8geW91ciBvd24gYmFuaz8gWW91IGNhbiBjaGFuZ2UgdGhpcyBvbiB0aGUgcmVzdWx0cyBzY3JlZW4uIiksCiAgICBDYXJkKHt9LAogICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIG1hcmdpbkJvdHRvbTogMTQgfSB9LAogICAgICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmJvZHksIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IEMudGV4dE1pZCB9IH0sICdBZ2VuY3kgd29yayBtb3ZlZCB0byB5b3VyIGJhbmsnKSwgcGN0KSwKICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTAsIG1hcmdpbkJvdHRvbTogMTYgfSB9LCAuLi5idXR0b25zKSwKICAgICAgc2xpZGVyLAogICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZm9udFNpemU6IEYudGlueSwgY29sb3I6IEMudGV4dE11dGVkLCBtYXJnaW5Ub3A6IDggfSB9LAogICAgICAgIGgoJ3NwYW4nLCBudWxsLCAnMTMlIMK3IGNvbnNlcnZhdGl2ZScpLCBoKCdzcGFuJywgbnVsbCwgJzI2JSDCtyBtb2RlcmF0ZScpLCBoKCdzcGFuJywgbnVsbCwgJzUwJSDCtyBvcHRpbWlzdGljJykpLAogICAgICBub3RlQm94KSk7Cn0KCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2YW5pbGxhL2xlYWQuanMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBMZWFkIGNhcHR1cmUsIHBsYWluLUpTIHZpZXcuCgogICBFdmVyeXRoaW5nIHRoaXMgZm9ybSBET0VTICh0aGUgSHViU3BvdCBjb25maWd1cmF0aW9uIGFuZCBzdWJtaXNzaW9uLCB0aGUKICAgUERGIHJlcG9ydCwgdGhlIGxvY2FsIGJhY2t1cCkgY29tZXMgZnJvbSAuLi9zcmMvbGVhZC9jb3JlLmpzLCBzaGFyZWQKICAgdmVyYmF0aW0gd2l0aCB0aGUgUmVhY3QgYnVpbGQuIFRoaXMgZmlsZSBpcyBvbmx5IG1hcmt1cCBhbmQgZmllbGQgc3RhdGUsCiAgIHNvIHRoZSB0d28gYnVpbGRzIGNhbm5vdCBkcmlmdCBvbiB0aGUgZm9ybSBHVUlELCB0aGUgZmllbGRzIHNlbnQsIG9yIHRoZQogICByZXBvcnQgdGhlIHZpc2l0b3IgcmVjZWl2ZXMuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLyogYGdldFJgIGFuZCBgZ2V0Q29udGV4dGAgYXJlIHJlYWQgYXQgc3VibWl0IHRpbWUsIG5vdCBhdCByZW5kZXIgdGltZTogdGhlCiAgIHZpc2l0b3IgY2FuIG1vdmUgdGhlIGNvbmZpZGVuY2Ugc2xpZGVyIGFmdGVyIHRoaXMgZm9ybSBpcyBvbiBzY3JlZW4sIGFuZAogICB0aGUgcmVwb3J0IHRoZXkgcmVjZWl2ZSBtdXN0IGJlIHRoZSBmaWd1cmVzIHRoZXkgYXJlIGxvb2tpbmcgYXQuCgogICBTdWJtaXNzaW9uIGlzIGVtYmVkLWZpcnN0OiB0aGUgY2FyZCB0cmllcyB0byByZW5kZXIgdGhlIGNsaWVudCdzIGFjdHVhbAogICBIdWJTcG90IGZvcm0gKGhic3B0LmZvcm1zLmNyZWF0ZSkuIFdoaWxlIGl0IGxvYWRzLCBhbmQgd2hlbmV2ZXIgaXQgY2Fubm90CiAgIHJlbmRlciAoYWQtYmxvY2tlcnMsIENTUCksIHRoZSBjYWxjdWxhdG9yJ3Mgb3duIHN0eWxlZCBmb3JtIHN0YW5kcyBpbiBhbmQKICAgcG9zdHMgdG8gdGhlIHNhbWUgSHViU3BvdCBmb3JtIHZpYSB0aGUgRm9ybXMgQVBJLCBzbyB0aGUgZmxvdyBhbmQgdGhlCiAgIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwgZWl0aGVyIHdheS4gKi8KZnVuY3Rpb24gTGVhZENhcHR1cmUoZ2V0UiwgZ2V0Q29udGV4dCkgewogIGNvbnN0IGxlYWQgPSB7IG5hbWU6ICcnLCBlbWFpbDogJycsIG9yZzogJycsIHJvbGU6ICcnIH07CiAgbGV0IHNlbmRpbmcgPSBmYWxzZTsKICBsZXQgdG91Y2hlZCA9IGZhbHNlOwoKICAvLyBMaWdodCBmaWVsZHMgb24gdGhlIG5hdnkgY2FyZDogbmVhci13aGl0ZSBzbyB0aGV5IHJlYWQgYXMgaW5wdXRzLCBkYXJrIHRleHQuCiAgY29uc3QgaW5wdXRTdHlsZSA9IHsKICAgIGZsZXg6ICcxIDEgMjAwcHgnLCBtaW5XaWR0aDogMTUwLCBwYWRkaW5nOiAnMTFweCAxNHB4JywgYm9yZGVyUmFkaXVzOiA5OTksCiAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScsIGJhY2tncm91bmQ6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTIpJywKICAgIGNvbG9yOiBDLnRleHQsIGZvbnRTaXplOiBGLnNtYWxsLCBvdXRsaW5lOiAnbm9uZScsIGZvbnRGYW1pbHk6ICdpbmhlcml0JywKICB9OwoKICBjb25zdCBmaWVsZCA9IChrZXksIGF0dHJzKSA9PiB7CiAgICBjb25zdCBlbCA9IGgoJ2lucHV0JywgeyAuLi5hdHRycywgc3R5bGU6IGlucHV0U3R5bGUgfSk7CiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4geyB0b3VjaGVkID0gdHJ1ZTsgbGVhZFtrZXldID0gZS50YXJnZXQudmFsdWU7IHJlZnJlc2goKTsgfSk7CiAgICByZXR1cm4gZWw7CiAgfTsKCiAgY29uc3QgbmFtZSA9IGZpZWxkKCduYW1lJywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnWW91ciBuYW1lIConLCAnYXJpYS1sYWJlbCc6ICdZb3VyIG5hbWUgKHJlcXVpcmVkKScsIGF1dG9jb21wbGV0ZTogJ25hbWUnIH0pOwogIGNvbnN0IGVtYWlsID0gZmllbGQoJ2VtYWlsJywgeyB0eXBlOiAnZW1haWwnLCBwbGFjZWhvbGRlcjogJ1dvcmsgZW1haWwgKicsICdhcmlhLWxhYmVsJzogJ1dvcmsgZW1haWwgKHJlcXVpcmVkKScsIGF1dG9jb21wbGV0ZTogJ2VtYWlsJyB9KTsKICBjb25zdCBvcmcgPSBmaWVsZCgnb3JnJywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnT3JnYW5pc2F0aW9uJywgJ2FyaWEtbGFiZWwnOiAnT3JnYW5pc2F0aW9uJywgYXV0b2NvbXBsZXRlOiAnb3JnYW5pemF0aW9uJyB9KTsKCiAgY29uc3Qgcm9sZSA9IGgoJ3NlbGVjdCcsIHsgJ2FyaWEtbGFiZWwnOiAnWW91ciByb2xlJywgc3R5bGU6IHsgLi4uaW5wdXRTdHlsZSwgY29sb3I6IEMudGV4dE11dGVkIH0gfSwKICAgIGgoJ29wdGlvbicsIHsgdmFsdWU6ICcnLCBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ1lvdXIgcm9sZScpLAogICAgLi4uUk9MRV9PUFRJT05TLm1hcChvID0+IGgoJ29wdGlvbicsIHsgdmFsdWU6IG8sIHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCBvKSkpOwogIHJvbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB7IHRvdWNoZWQgPSB0cnVlOyBsZWFkLnJvbGUgPSBlLnRhcmdldC52YWx1ZTsgcm9sZS5zdHlsZS5jb2xvciA9IGxlYWQucm9sZSA\/IEMudGV4dCA6IEMudGV4dE11dGVkOyB9KTsKCiAgY29uc3QgYnV0dG9uID0gaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJyB9LCAnRG93bmxvYWQgUERGIHJlcG9ydCcpOwogIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7CiAgICBjb25zdCByZWFkeSA9IGxlYWQubmFtZSAmJiBsZWFkLmVtYWlsOwogICAgT2JqZWN0LmFzc2lnbihidXR0b24uc3R5bGUsIHsKICAgICAgcGFkZGluZzogJzE0cHggMzJweCcsIGJhY2tncm91bmQ6IHJlYWR5ID8gJyNmZmYnIDogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xNSknLAogICAgICBjb2xvcjogcmVhZHkgPyBDLm5hdnkgOiAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJywKICAgICAgYm9yZGVyOiAnbm9uZScsIGJvcmRlclJhZGl1czogJzk5OXB4JywgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogJzgwMCcsCiAgICAgIGN1cnNvcjogcmVhZHkgJiYgIXNlbmRpbmcgPyAncG9pbnRlcicgOiAnbm90LWFsbG93ZWQnLCBmb250RmFtaWx5OiAnaW5oZXJpdCcsCiAgICB9KTsKICAgIGJ1dHRvbi5kaXNhYmxlZCA9ICFyZWFkeSB8fCBzZW5kaW5nOwogIH07CiAgcmVmcmVzaCgpOwoKICBjb25zdCBzdWJjb3B5ID0gaCgncCcsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjc1KScsIG1hcmdpblRvcDogNiwgbWFyZ2luQm90dG9tOiAxOCB9IH0sICdEb3dubG9hZCBhIGZvcm1hdHRlZCBzdW1tYXJ5IHJlYWR5IHRvIHNoYXJlIHdpdGggeW91ciB0ZWFtIG9yIGJvYXJkLicpOwoKICAvLyBUaGUgY2FsY3VsYXRvcidzIG93biBmb3JtLCBrZXB0IGFzIHRoZSBhbHdheXMtd29ya2luZyBmYWxsYmFjayByb3V0ZS4KICBjb25zdCBmYWxsYmFja1dyYXAgPSBoKCdkaXYnLCBudWxsLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTAsIGZsZXhXcmFwOiAnd3JhcCcsIG1hcmdpbkJvdHRvbTogMTAgfSB9LCBuYW1lLCBlbWFpbCksCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAxMCwgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAxNiB9IH0sIG9yZywgcm9sZSksCiAgICBidXR0b24sCiAgICBoKCdwJywgeyBzdHlsZTogeyBmb250U2l6ZTogRi50aW55LCBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC41NSknLCBtYXJnaW5Ub3A6IDEyLCBtYXJnaW5Cb3R0b206IDAgfSB9LCAiQnkgc3VibWl0dGluZyB5b3VyIGRldGFpbHMsIHlvdSBhZ3JlZSB0byBzaGFyZSB5b3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgc28gd2UgY2FuIHJlYWNoIG91dCB0byBzZWUgaWYgd2UgY2FuIGhlbHAgd2l0aCB5b3VyIHByb2dyYW1tZS4gRGV0YWlscyBhcmUgcHJvY2Vzc2VkIGluIGxpbmUgd2l0aCBSTERhdGl4J3MgcHJpdmFjeSBub3RpY2UuIikpOwoKICAvLyBIdWJTcG90J3MgZW1iZWRkZWQgZm9ybSByZW5kZXJzIGluIGhlcmU7IHdoaXRlIHBhbmVsIHNvIGl0cyBzdHlsaW5nIHN0YXlzIGxlZ2libGUgb24gbmF2eS4KICBjb25zdCB3aWRnZXRXcmFwID0gaCgnZGl2JywgeyBpZDogJ3NtYXJ0bWF0Y2gtaHMtZm9ybScsIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJywgYmFja2dyb3VuZDogJyNmZmYnLCBib3JkZXJSYWRpdXM6IDEyLCBwYWRkaW5nOiAnMTRweCAxNnB4JyB9IH0pOwoKICBjb25zdCBjYXJkID0gaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW5Cb3R0b206IDI4LCBwYWRkaW5nOiAnY2xhbXAoMThweCwgM3Z3LCAyOHB4KScsIGJvcmRlclJhZGl1czogMTgsIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAke0MubmF2eX0gMCUsICR7Qy5uYXZ5TWlkfSAxMDAlKWAsIGJvcmRlcjogJ25vbmUnIH0gfSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxMCwgbWFyZ2luQm90dG9tOiA0IH0gfSwKICAgICAgSWNvbignZG93bmxvYWQnLCAyMiwgQy5zZWFmb2FtKSwKICAgICAgaCgnaDMnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmgzLCBmb250V2VpZ2h0OiA4MDAsIG1hcmdpbjogMCwgY29sb3I6ICcjZmZmJyB9IH0sICdHZXQgeW91ciByZXBvcnQnKSksCiAgICBzdWJjb3B5LCB3aWRnZXRXcmFwLCBmYWxsYmFja1dyYXApOwoKICBjb25zdCB0aGFua3MgPSAod2hvLCB2aWFFbWJlZCkgPT4gewogICAgY29uc3QgZmlyc3QgPSAod2hvIHx8ICcnKS5zcGxpdCgnICcpWzBdOwogICAgY29uc3QgYWdhaW4gPSBoKCdidXR0b24nLCB7IHR5cGU6ICdidXR0b24nLCBzdHlsZTogeyBtYXJnaW5Ub3A6IDE0LCBwYWRkaW5nOiAnMTBweCAyMnB4JywgYmFja2dyb3VuZDogJ3JnYmEoMjU1LDI1NSwyNTUsMC4xNCknLCBjb2xvcjogJyNmZmYnLCBib3JkZXI6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpJywgYm9yZGVyUmFkaXVzOiAnOTk5cHgnLCBmb250U2l6ZTogRi5zbWFsbCwgZm9udFdlaWdodDogJzcwMCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5OiAnaW5oZXJpdCcgfSB9LCAnRG93bmxvYWQgdGhlIHJlcG9ydCBhZ2FpbicpOwogICAgYWdhaW4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBnZW5lcmF0ZVBERihnZXRSKCksIGxlYWQsIGdldENvbnRleHQoKSkpOwogICAgY2FyZC5yZXBsYWNlV2l0aChoKCdkaXYnLCB7IHN0eWxlOiB7IG1hcmdpbkJvdHRvbTogMjgsIHBhZGRpbmc6ICcyNnB4IDI4cHgnLCBib3JkZXJSYWRpdXM6IDE4LCBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgJHtDLm5hdnl9IDAlLCAke0MubmF2eU1pZH0gMTAwJSlgLCBib3JkZXI6ICdub25lJywgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0sCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuaDMsIGZvbnRXZWlnaHQ6IDgwMCwgY29sb3I6IEMuc2VhZm9hbSwgbWFyZ2luQm90dG9tOiA4IH0gfSwgZmlyc3QgPyBgVGhhbmtzLCAke2ZpcnN0fSwgeW91ciByZXBvcnQgaGFzIGRvd25sb2FkZWQuYCA6ICdUaGFua3MsIHlvdXIgcmVwb3J0IGhhcyBkb3dubG9hZGVkLicpLAogICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC44KScsIGxpbmVIZWlnaHQ6IDEuNiB9IH0sICJBbiBSTERhdGl4IEJhbmtTdGFmZiBzcGVjaWFsaXN0IGNhbiB2YWxpZGF0ZSB0aGVzZSBmaWd1cmVzIGFnYWluc3QgeW91ciBvcmdhbmlzYXRpb24ncyBvd24gYmFuayBhbmQgYWdlbmN5IHJhdGVzLiBXZSdsbCBiZSBpbiB0b3VjaC4iKSwKICAgICAgLi4uKHZpYUVtYmVkID8gW2FnYWluXSA6IFtdKSkpOwogIH07CgogIC8vIEVtYmVkLWZpcnN0OiBzd2FwIHRoZSB3aWRnZXQgaW4gb25jZSBpdCBoYXMgcmVuZGVyZWQsIHVubGVzcyB0aGUgdmlzaXRvcgogIC8vIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgdHlwaW5nIGludG8gdGhlIGZhbGxiYWNrIGZvcm0uCiAgY3JlYXRlRW1iZWRkZWRMZWFkRm9ybSh7CiAgICBjb250YWluZXI6IHdpZGdldFdyYXAsCiAgICBnZXRNZXNzYWdlOiAoKSA9PiBidWlsZENvbnRleHRNZXNzYWdlKGdldFIoKSwgZ2V0Q29udGV4dCgpKSwKICAgIG9uU3VibWl0dGVkOiBhc3luYyAod2lkZ2V0TGVhZCkgPT4gewogICAgICBPYmplY3QuYXNzaWduKGxlYWQsIHdpZGdldExlYWQpOwogICAgICBhd2FpdCByZWNvcmRBbmRSZXBvcnQoZ2V0UigpLCBsZWFkLCBnZXRDb250ZXh0KCkpOwogICAgICB0aGFua3MobGVhZC5uYW1lLCB0cnVlKTsKICAgIH0sCiAgfSkudGhlbihyZW5kZXJlZCA9PiB7CiAgICBpZiAocmVuZGVyZWQgJiYgIXRvdWNoZWQpIHsKICAgICAgd2lkZ2V0V3JhcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgZmFsbGJhY2tXcmFwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIHN1YmNvcHkudGV4dENvbnRlbnQgPSAnQ29tcGxldGUgdGhlIGZvcm0gYW5kIHlvdXIgZm9ybWF0dGVkIHN1bW1hcnkgZG93bmxvYWRzLCByZWFkeSB0byBzaGFyZSB3aXRoIHlvdXIgdGVhbSBvciBib2FyZC4nOwogICAgfQogIH0pOwoKICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7CiAgICBpZiAoIWxlYWQubmFtZSB8fCAhbGVhZC5lbWFpbCB8fCBzZW5kaW5nKSByZXR1cm47CiAgICBzZW5kaW5nID0gdHJ1ZTsKICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdHZW5lcmF0aW5nIHJlcG9ydC4uLic7CiAgICByZWZyZXNoKCk7CiAgICBhd2FpdCBzdWJtaXRMZWFkKGdldFIoKSwgbGVhZCwgZ2V0Q29udGV4dCgpKTsKICAgIHNlbmRpbmcgPSBmYWxzZTsKICAgIHRoYW5rcyhsZWFkLm5hbWUsIGZhbHNlKTsKICB9KTsKCiAgcmV0dXJuIGNhcmQ7Cn0KCi8qIOKUgOKUgCAjYWRtaW4tbGVhZHM6IHJldmlldyArIENTVi1leHBvcnQgbG9jYWxseSBzdG9yZWQgc3VibWlzc2lvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFJlY29yZHMgbGl2ZSBvbmx5IGluIHRoaXMgYnJvd3NlcidzIGxvY2FsU3RvcmFnZSAocGVyIGRldmljZSk7IEh1YlNwb3QKICAgcmVtYWlucyB0aGUgc3lzdGVtIG9mIHJlY29yZC4gKi8KZnVuY3Rpb24gQWRtaW5MZWFkcyhvbkNsb3NlKSB7CiAgbGV0IHJlY29yZHMgPSByZWFkU3VibWlzc2lvbnMoKTsKCiAgY29uc3QgY2VsbCA9IHsgcGFkZGluZzogJzEwcHggMTJweCcsIGZvbnRTaXplOiBGLnRpbnksIGNvbG9yOiBDLnRleHRNaWQsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke0MuYm9yZGVyTGlnaHR9YCwgdGV4dEFsaWduOiAnbGVmdCcsIHdoaXRlU3BhY2U6ICdub3dyYXAnIH07CiAgY29uc3Qgd3JhcCA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWF4V2lkdGg6IDEwMDAsIG1hcmdpbjogJzAgYXV0bycsIHBhZGRpbmc6ICdjbGFtcCgyMHB4LCA0dncsIDQ4cHgpJyB9IH0pOwoKICBjb25zdCBleHBvcnRDU1YgPSAoKSA9PiB7CiAgICBjb25zdCBhID0gaCgnYScsIHsgaHJlZjogVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbc3VibWlzc2lvbnNDU1YocmVjb3JkcyldLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSkpLCBkb3dubG9hZDogJ3NtYXJ0bWF0Y2gtcm9pLWxlYWRzLScgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSArICcuY3N2JyB9KTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7IGEuY2xpY2soKTsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTsKICB9OwogIGNvbnN0IGNsZWFyQWxsID0gKCkgPT4gewogICAgaWYgKCF3aW5kb3cuY29uZmlybSgnUGVybWFuZW50bHkgZGVsZXRlIGFsbCAnICsgcmVjb3Jkcy5sZW5ndGggKyAnIGxvY2FsIGxlYWQgcmVjb3Jkcz8gVGhpcyBjYW5ub3QgYmUgdW5kb25lIChIdWJTcG90IGNvcGllcyBhcmUgdW5hZmZlY3RlZCkuJykpIHJldHVybjsKICAgIGNsZWFyU3VibWlzc2lvbnMoKTsgcmVjb3JkcyA9IFtdOyByZW5kZXIoKTsKICB9OwoKICBjb25zdCBidG4gPSAobGFiZWwsIG9uLCBlbmFibGVkLCBzdHlsZSkgPT4gewogICAgY29uc3QgZWwgPSBoKCdidXR0b24nLCB7IHR5cGU6ICdidXR0b24nLCBzdHlsZTogeyBwYWRkaW5nOiAnMTBweCAyMHB4JywgYm9yZGVyUmFkaXVzOiAxMCwgZm9udFNpemU6IEYudGlueSwgZm9udEZhbWlseTogJ2luaGVyaXQnLCBjdXJzb3I6IGVuYWJsZWQgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsIC4uLnN0eWxlIH0gfSwgbGFiZWwpOwogICAgZWwuZGlzYWJsZWQgPSAhZW5hYmxlZDsKICAgIGlmIChlbmFibGVkKSBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uKTsKICAgIHJldHVybiBlbDsKICB9OwoKICBmdW5jdGlvbiByZW5kZXIoKSB7CiAgICB3cmFwLnRleHRDb250ZW50ID0gJyc7CiAgICB3cmFwLmFwcGVuZENoaWxkKGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLCBnYXA6IDE2LCBmbGV4V3JhcDogJ3dyYXAnLCBtYXJnaW5Cb3R0b206IDE4IH0gfSwKICAgICAgaCgnZGl2JywgbnVsbCwKICAgICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnRpbnksIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IEMuYWNjZW50LCBsZXR0ZXJTcGFjaW5nOiAzLCB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyB9IH0sICdBZG1pbiDCtyBsb2NhbCByZWNvcmRzJyksCiAgICAgICAgaCgnaDInLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLmgyLCBmb250V2VpZ2h0OiA4MDAsIGNvbG9yOiBDLnRleHQsIG1hcmdpbjogJzRweCAwIDAnIH0gfSwgYExlYWQgZm9ybSBzdWJtaXNzaW9ucyAoJHtyZWNvcmRzLmxlbmd0aH0pYCksCiAgICAgICAgaCgncCcsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYudGlueSwgY29sb3I6IEMudGV4dE11dGVkLCBtYXJnaW5Ub3A6IDYgfSB9LCAnU3RvcmVkIGluIHRoaXMgYnJvd3NlciBvbmx5LCBhcyBhIGJhY2t1cDsgSHViU3BvdCBob2xkcyB0aGUgY2Fub25pY2FsIGNvcGllcy4gUmVtb3ZlICcsIGgoJ2NvZGUnLCBudWxsLCAnI2FkbWluLWxlYWRzJyksICcgZnJvbSB0aGUgVVJMIHRvIHJldHVybi4nKSksCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEwIH0gfSwKICAgICAgICBidG4oJ0V4cG9ydCBDU1YnLCBleHBvcnRDU1YsICEhcmVjb3Jkcy5sZW5ndGgsIHsgYm9yZGVyOiAnbm9uZScsIGJhY2tncm91bmQ6IHJlY29yZHMubGVuZ3RoID8gQy5hY2NlbnQgOiBDLmJvcmRlciwgY29sb3I6IHJlY29yZHMubGVuZ3RoID8gJyNmZmYnIDogQy50ZXh0TXV0ZWQsIGZvbnRXZWlnaHQ6IDcwMCB9KSwKICAgICAgICBidG4oJ0NsZWFyJywgY2xlYXJBbGwsICEhcmVjb3Jkcy5sZW5ndGgsIHsgYm9yZGVyOiBgMXB4IHNvbGlkICR7Qy5ib3JkZXJ9YCwgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JywgY29sb3I6IHJlY29yZHMubGVuZ3RoID8gQy50ZXh0TWlkIDogQy50ZXh0TXV0ZWQsIGZvbnRXZWlnaHQ6IDYwMCB9KSwKICAgICAgICBidG4oJ0Nsb3NlJywgb25DbG9zZSwgdHJ1ZSwgeyBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlcn1gLCBiYWNrZ3JvdW5kOiBDLnN1cmZhY2UsIGNvbG9yOiBDLnRleHRNaWQsIGZvbnRXZWlnaHQ6IDYwMCB9KSkpKTsKCiAgICBpZiAoIXJlY29yZHMubGVuZ3RoKSB7CiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoaCgnZGl2JywgeyBzdHlsZTogeyBwYWRkaW5nOiA0OCwgdGV4dEFsaWduOiAnY2VudGVyJywgYmFja2dyb3VuZDogQy5zdXJmYWNlLCBib3JkZXJSYWRpdXM6IDE0LCBib3JkZXI6IGAxcHggZGFzaGVkICR7Qy5ib3JkZXJ9YCwgY29sb3I6IEMudGV4dE11dGVkLCBmb250U2l6ZTogRi5zbWFsbCB9IH0sCiAgICAgICAgJ05vIHN1Ym1pc3Npb25zIHlldC4gUmVjb3JkcyBhcHBlYXIgaGVyZSBhcyB1c2VycyBjb21wbGV0ZSB0aGUgbGVhZCBmb3JtIGluIHRoaXMgYnJvd3Nlci4nKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHdyYXAuYXBwZW5kQ2hpbGQoaCgnZGl2JywgeyBzdHlsZTogeyBvdmVyZmxvd1g6ICdhdXRvJywgYmFja2dyb3VuZDogQy5zdXJmYWNlLCBib3JkZXJSYWRpdXM6IDE0LCBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlckxpZ2h0fWAgfSB9LAogICAgICBoKCd0YWJsZScsIHsgc3R5bGU6IHsgYm9yZGVyQ29sbGFwc2U6ICdjb2xsYXBzZScsIHdpZHRoOiAnMTAwJScgfSB9LAogICAgICAgIGgoJ3RoZWFkJywgbnVsbCwgaCgndHInLCBudWxsLCAuLi5bJ1doZW4nLCAnTmFtZScsICdFbWFpbCcsICdPcmdhbmlzYXRpb24nLCAnUm9sZScsICdOZXQgc2F2aW5nJywgJ0hycy93ayddCiAgICAgICAgICAubWFwKHQgPT4gaCgndGgnLCB7IHN0eWxlOiB7IC4uLmNlbGwsIGNvbG9yOiBDLnRleHRNdXRlZCwgZm9udFdlaWdodDogNzAwIH0gfSwgdCkpKSksCiAgICAgICAgaCgndGJvZHknLCBudWxsLCAuLi5yZWNvcmRzLm1hcChyZWMgPT4gaCgndHInLCBudWxsLAogICAgICAgICAgaCgndGQnLCB7IHN0eWxlOiBjZWxsIH0sIG5ldyBEYXRlKHJlYy50aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCdlbi1HQicpKSwKICAgICAgICAgIGgoJ3RkJywgeyBzdHlsZTogeyAuLi5jZWxsLCBjb2xvcjogQy50ZXh0LCBmb250V2VpZ2h0OiA2MDAgfSB9LCAocmVjLmxlYWQgJiYgcmVjLmxlYWQubmFtZSkgfHwgJy0nKSwKICAgICAgICAgIGgoJ3RkJywgeyBzdHlsZTogY2VsbCB9LCAocmVjLmxlYWQgJiYgcmVjLmxlYWQuZW1haWwpIHx8ICctJyksCiAgICAgICAgICBoKCd0ZCcsIHsgc3R5bGU6IGNlbGwgfSwgKHJlYy5sZWFkICYmIHJlYy5sZWFkLm9yZykgfHwgJy0nKSwKICAgICAgICAgIGgoJ3RkJywgeyBzdHlsZTogY2VsbCB9LCAocmVjLmxlYWQgJiYgcmVjLmxlYWQucm9sZSkgfHwgJy0nKSwKICAgICAgICAgIGgoJ3RkJywgeyBzdHlsZTogeyAuLi5jZWxsLCBjb2xvcjogQy5hY2NlbnQsIGZvbnRXZWlnaHQ6IDcwMCB9IH0sIHJlYy5yZXN1bHRzICYmIHJlYy5yZXN1bHRzLm5ldFNhdmluZyAhPSBudWxsID8gZm10SyhyZWMucmVzdWx0cy5uZXRTYXZpbmcpIDogJy0nKSwKICAgICAgICAgIGgoJ3RkJywgeyBzdHlsZTogY2VsbCB9LCByZWMucmVzdWx0cyAmJiByZWMucmVzdWx0cy50aW1lU2F2ZWRXZWVrICE9IG51bGwgPyBmbXROdW0ocmVjLnJlc3VsdHMudGltZVNhdmVkV2VlaykgOiAnLScpKSkpKSkpOwogIH0KCiAgcmVuZGVyKCk7CiAgcmV0dXJuIHdyYXA7Cn0KCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2YW5pbGxhL3Jlc3VsdHMuanMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBUaGUgcmVzdWx0cyBwYWdlLCBwb3J0ZWQgZnJvbSB0aGUgUmVhY3QgYnVpbGQncyBSZXN1bHRzUGFnZS5qc3guCgogICBPbmUgc3RydWN0dXJhbCBkaWZmZXJlbmNlLCBhbmQgaXQgaXMgYW4gaW1wcm92ZW1lbnQgcmF0aGVyIHRoYW4gYQogICBjb21wcm9taXNlOiBSZWFjdCByZWJ1aWx0IHRoZSB3aG9sZSBwYWdlIHdoZW5ldmVyIHRoZSBjb25maWRlbmNlIHNsaWRlcgogICBtb3ZlZC4gSGVyZSB0aGUgcGFnZSBpcyBidWlsdCBvbmNlIGFuZCBhIGxpc3Qgb2YgdXBkYXRlciBmdW5jdGlvbnMgcGF0Y2hlcwogICB0aGUgZmlndXJlcyBpbiBwbGFjZSwgc28gZHJhZ2dpbmcgdGhlIHNsaWRlciBuZXZlciByZWJ1aWxkcyB0aGUgRE9NLAogICBuZXZlciBpbnRlcnJ1cHRzIHRoZSBkcmFnLCBhbmQgbmV2ZXIgbG9zZXMgZm9jdXMuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLy8gUmVzcG9uc2l2ZSBncmlkOiBzaWRlLWJ5LXNpZGUgd2hlcmUgdGhlcmUncyByb29tLCBzdGFja2VkIG9uIG5hcnJvdyBzY3JlZW5zLgpjb25zdCBmbHVpZEdyaWQgPSBtaW4gPT4gKHsgZGlzcGxheTogJ2dyaWQnLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBgcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgobWluKDEwMCUsICR7bWlufXB4KSwgMWZyKSlgIH0pOwoKY29uc3QgZm10UGF5YmFjayA9IG0gPT4gbSA9PSBudWxsID8gJ24vYScgOiBgJHtNYXRoLnJvdW5kKG0gKiAzNjUgLyAxMikudG9Mb2NhbGVTdHJpbmcoJ2VuLUdCJyl9IGRheXNgOwpjb25zdCBmbXRQY3QxID0gdiA9PiBgJHsoTWF0aC5yb3VuZCh2ICogMTApIC8gMTApLnRvTG9jYWxlU3RyaW5nKCdlbi1HQicpfSVgOwpjb25zdCBmbXRNdWx0aXBsZSA9IG0gPT4gbSA9PSBudWxsID8gJ24vYScgOiAobSA+PSAxMCA\/IE1hdGgucm91bmQobSkgOiBNYXRoLnJvdW5kKG0gKiAxMCkgLyAxMCkgKyAnw5cnOwoKLyogQ291bnRzIGEgbnVtYmVyIHVwIHRvIGl0cyB0YXJnZXQgd2l0aCBlYXNlLW91dCBjdWJpYywgZnJvbSB3aGF0ZXZlciBpcyBvbgogICBzY3JlZW4gbm93IHJhdGhlciB0aGFuIGZyb20gemVybywgc28gYSBjaGFuZ2Ugb2YgY29uZmlkZW5jZSByb2xscyB0aGUKICAgZmlndXJlcyBzbW9vdGhseSBpbnN0ZWFkIG9mIHNuYXBwaW5nIGJhY2suIFJldHVybnMgYSBzZXR0ZXIuICovCmZ1bmN0aW9uIGNvdW50ZXIoZWwsIGZvcm1hdCwgZHVyYXRpb24gPSA5MDApIHsKICBsZXQgY3VycmVudCA9IDAsIHJhZiA9IDA7CiAgcmV0dXJuIHRhcmdldCA9PiB7CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHJldHVybjsKICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CiAgICBjb25zdCBmcm9tID0gY3VycmVudCwgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgIGNvbnN0IHRpY2sgPSBub3cgPT4gewogICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgKG5vdyAtIHN0YXJ0KSAvIGR1cmF0aW9uKTsKICAgICAgY29uc3QgdiA9IGZyb20gKyAodGFyZ2V0IC0gZnJvbSkgKiAoMSAtIE1hdGgucG93KDEgLSB0LCAzKSk7CiAgICAgIGN1cnJlbnQgPSB2OwogICAgICBlbC50ZXh0Q29udGVudCA9IGZvcm1hdCA\/IGZvcm1hdCh2KSA6IE1hdGgucm91bmQodik7CiAgICAgIGlmICh0IDwgMSkgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwogICAgICBlbHNlIHsgY3VycmVudCA9IHRhcmdldDsgZWwudGV4dENvbnRlbnQgPSBmb3JtYXQgPyBmb3JtYXQodGFyZ2V0KSA6IE1hdGgucm91bmQodGFyZ2V0KTsgfQogICAgfTsKICAgIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsKICB9Owp9CgpmdW5jdGlvbiBLcGlUaWxlKHsgbGFiZWwsIHZhbHVlLCBzdWIsIGljb25LZXksIHRpcCB9KSB7CiAgcmV0dXJuIGgoJ2RpdicsIHsgY2xhc3M6ICdrcGktdGlsZScsIHN0eWxlOiB7IHBhZGRpbmc6ICcyNHB4IDIycHgnLCBiYWNrZ3JvdW5kOiBDLnN1cmZhY2UsIGJvcmRlclJhZGl1czogMTgsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYWNjZW50fTI1YCB9IH0sCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogMTAsIG1hcmdpbkJvdHRvbTogMTAgfSB9LAogICAgICBJY29uKGljb25LZXksIDI2LCBDLmFjY2VudCksCiAgICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnRpbnksIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IEMudGV4dE11dGVkIH0gfSwgbGFiZWwpLAogICAgICB0aXAgJiYgSW5mb1RpcCh0aXApKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuaDEsIGZvbnRXZWlnaHQ6IDgwMCwgY29sb3I6IEMuYWNjZW50LCBtYXJnaW5Cb3R0b206IDQgfSB9LCB2YWx1ZSksCiAgICBzdWIgJiYgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi50aW55LCBjb2xvcjogQy50ZXh0TWlkIH0gfSwgc3ViKSk7Cn0KCi8qIGByZWNhbGMoZClgIHJldHVybnMgYSBmcmVzaCBlbmdpbmUgcmVzdWx0IGF0IGNvbmZpZGVuY2UgbGV2ZWwgZC4gKi8KZnVuY3Rpb24gUmVzdWx0c1BhZ2UoeyByMCwgZGlzcGxhY2VtZW50LCBjaG9zZW4sIHJlY2FsYywgb25EaXNwbGFjZW1lbnQsIG9uQWRqdXN0LCBvblN0YXJ0T3ZlciwgbGVhZENvbnRleHQgfSkgewogIGxldCByID0gcjAsIGRpc3AgPSBkaXNwbGFjZW1lbnQsIHRvdWNoZWQgPSBjaG9zZW47CiAgY29uc3QgdXBkYXRlcnMgPSBbXTsgICAgICAgICAgICAgICAgIC8vIGNhbGxlZCB3aXRoIHRoZSBuZXcgcmVzdWx0IG9uIGV2ZXJ5IGNoYW5nZQogIGNvbnN0IHRyYWNrID0gZm4gPT4geyB1cGRhdGVycy5wdXNoKGZuKTsgcmV0dXJuIGZuOyB9OwoKICBjb25zdCBzdHlsZSA9IGgoJ3N0eWxlJywgbnVsbCwgYEBrZXlmcmFtZXMgcmZhZGUgeyBmcm9tIHsgb3BhY2l0eTowOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgyNHB4KTsgfSB0byB7IG9wYWNpdHk6MTsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7IH0gfQogICAgQGtleWZyYW1lcyBnbG93IHsgMCUsMTAwJSB7IHRleHQtc2hhZG93OiAwIDAgMjZweCByZ2JhKDUyLDIyMiwxOTQsMC4zNSk7IH0gNTAlIHsgdGV4dC1zaGFkb3c6IDAgMCA0NnB4IHJnYmEoNTIsMjIyLDE5NCwwLjYpOyB9IH0KICAgIC5rcGktZ3JpZC0zIHsgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKTsgZ2FwOjE2cHg7IG1hcmdpbi1ib3R0b206MTRweDsgfQogICAgLmtwaS1ncmlkLTQgeyBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpOyBnYXA6MTZweDsgbWFyZ2luLWJvdHRvbToxNHB4OyB9CiAgICBAbWVkaWEgKG1heC13aWR0aDo2NDBweCkgeyAua3BpLWdyaWQtMywgLmtwaS1ncmlkLTQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyB9IH0KICAgIC5rcGktdGlsZSB7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlOyB9CiAgICAua3BpLXRpbGU6aG92ZXIgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7IGJveC1zaGFkb3c6IDAgMTBweCAyOHB4IHJnYmEoMTUsNjUsNzAsMC4xNCk7IGJvcmRlci1jb2xvcjogJHtDLnNlYWZvYW19OyB9CiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgeyAua3BpLXRpbGUsIC5rcGktdGlsZTpob3ZlciB7IHRyYW5zaXRpb246bm9uZTsgdHJhbnNmb3JtOm5vbmU7IH0gfWApOwoKICAvKiDilIDilIAgQ29uZmlkZW5jZSBzdHJpcCDilIDilIAgKi8KICBjb25zdCBwcmVzZXRzID0gW1snQ29uc2VydmF0aXZlJywgMTNdLCBbJ01vZGVyYXRlJywgMjZdLCBbJ09wdGltaXN0aWMnLCA1MF1dOwogIGNvbnN0IHBpbGxTdHlsZSA9IG9uID0+ICh7CiAgICBwYWRkaW5nOiAnNnB4IDEycHgnLCBib3JkZXJSYWRpdXM6IDk5OSwgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRGYW1pbHk6ICdpbmhlcml0JywKICAgIGJvcmRlcjogYDFweCBzb2xpZCAke29uID8gQy5hY2NlbnQgOiBDLmJvcmRlcn1gLCBiYWNrZ3JvdW5kOiBvbiA\/IEMuYWNjZW50IDogQy5zdXJmYWNlMiwKICAgIGNvbG9yOiBvbiA\/ICcjZmZmJyA6IEMudGV4dE1pZCwgZm9udFdlaWdodDogNzAwLCBmb250U2l6ZTogRi50aW55LCB0cmFuc2l0aW9uOiAnYWxsIC4xNXMnLAogIH0pOwogIGNvbnN0IHBpbGxzID0gcHJlc2V0cy5tYXAoKFtsYmwsIHZdKSA9PiBoKCdidXR0b24nLCB7IHR5cGU6ICdidXR0b24nLCBzdHlsZTogcGlsbFN0eWxlKHRvdWNoZWQgJiYgZGlzcCA9PT0gdikgfSwgbGJsKSk7CiAgY29uc3Qgc2xpZGVyID0gaCgnaW5wdXQnLCB7IHR5cGU6ICdyYW5nZScsICdhcmlhLWxhYmVsJzogJ0FnZW5jeSB3b3JrIG1vdmVkIHRvIHlvdXIgYmFuayAoJSknLCBtaW46IDEzLCBtYXg6IDUwLCBzdGVwOiAxLCB2YWx1ZTogZGlzcCwgJ2FyaWEtdmFsdWV0ZXh0JzogYCR7ZGlzcH0lICgke3N0YW5jZShkaXNwKS5rZXl9KWAsIHN0eWxlOiB7IGZsZXg6ICcxIDEgMTIwcHgnLCBtaW5XaWR0aDogMTEwLCBjdXJzb3I6ICdwb2ludGVyJywgYWNjZW50Q29sb3I6IEMuYWNjZW50IH0gfSk7CiAgY29uc3QgcGN0T3V0ID0gaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuc21hbGwsIGZvbnRXZWlnaHQ6IDgwMCwgY29sb3I6IEMuYWNjZW50LCBtaW5XaWR0aDogNDIsIHRleHRBbGlnbjogJ3JpZ2h0JyB9IH0sIGAke2Rpc3B9JWApOwogIGNvbnN0IHN0YW5jZVRpcCA9IEluZm9UaXAoJycpOwogIGNvbnN0IHNldFN0YW5jZVRpcCA9IHN0ID0+IHsgY29uc3QgYiA9IHN0YW5jZVRpcC5xdWVyeVNlbGVjdG9yKCdbcm9sZT0idG9vbHRpcCJdJyk7IGlmIChiKSBiLnRleHRDb250ZW50ID0gYCR7c3Qua2V5fTogJHtzdC5ub3RlfSBBZGp1c3QgaXQgaGVyZSBhbmQgZXZlcnkgZmlndXJlIHJlY29tcHV0ZXMgbGl2ZS5gOyB9OwoKICBjb25zdCBjb25maWRlbmNlID0gaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDEyLCBmbGV4V3JhcDogJ3dyYXAnLCBwYWRkaW5nOiAnMTBweCAxNnB4JywgYmFja2dyb3VuZDogQy5zdXJmYWNlLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmJvcmRlcn1gLCBib3JkZXJSYWRpdXM6IDE0LCBtYXJnaW5Cb3R0b206IDE4IH0gfSwKICAgIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnRpbnksIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IEMudGV4dE1pZCwgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogOCB9IH0sICdDb25maWRlbmNlIGxldmVsJywgc3RhbmNlVGlwKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYgfSB9LCAuLi5waWxscyksCiAgICBzbGlkZXIsIHBjdE91dCk7CgogIC8qIOKUgOKUgCBDby1oZWFkbGluZXMg4pSA4pSAICovCiAgY29uc3QgbmV0QmlnID0gaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oZXJvLCBmb250V2VpZ2h0OiA4MDAsIGNvbG9yOiBDLmFjY2VudCwgbGluZUhlaWdodDogMSwgbGV0dGVyU3BhY2luZzogJy0zcHgnLCBhbmltYXRpb246ICdnbG93IDNzIGVhc2UtaW4tb3V0IGluZmluaXRlJyB9IH0pOwogIGNvbnN0IHNldE5ldCA9IGNvdW50ZXIobmV0QmlnLCBmbXRLKTsKICBjb25zdCBuZXRTdWIgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0TXV0ZWQsIG1hcmdpblRvcDogOCwgbGluZUhlaWdodDogMS41LCBtYXhXaWR0aDogNDQwLCBtYXJnaW5MZWZ0OiAnYXV0bycsIG1hcmdpblJpZ2h0OiAnYXV0bycgfSB9KTsKICBjb25zdCBuZXRDYXJkID0gaCgnZGl2JywgeyBzdHlsZTogeyB0ZXh0QWxpZ246ICdjZW50ZXInLCBwYWRkaW5nOiAnMjZweCAxOHB4JywgYmFja2dyb3VuZDogQy5zdXJmYWNlLCBib3JkZXJSYWRpdXM6IDIyLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmFjY2VudH0zMGAgfSB9LAogICAgbmV0QmlnLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMywgY29sb3I6IEMudGV4dE1pZCwgbWFyZ2luVG9wOiAxNCB9IH0sICdQb3RlbnRpYWwgYW5udWFsIGNhc2ggc2F2aW5nJyksCiAgICBuZXRTdWIpOwoKICBjb25zdCBub05ldENhcmQgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IHRleHRBbGlnbjogJ2NlbnRlcicsIHBhZGRpbmc6ICcyNnB4IDIycHgnLCBiYWNrZ3JvdW5kOiBDLnN1cmZhY2UsIGJvcmRlclJhZGl1czogMjIsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYW1iZXJ9NTVgLCBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfSB9LAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMSwgZm9udFdlaWdodDogODAwLCBjb2xvcjogQy5hbWJlciwgbGluZUhlaWdodDogMS4xIH0gfSwgJ05vIG5ldCBjYXNoIHNhdmluZycpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMywgY29sb3I6IEMudGV4dE1pZCwgbWFyZ2luVG9wOiA4IH0gfSwgJ2F0IHRoaXMgc2NhbGUnKSk7CiAgY29uc3Qgbm9OZXRCb2R5ID0gaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE11dGVkLCBtYXJnaW5Ub3A6IDEyLCBsaW5lSGVpZ2h0OiAxLjU1IH0gfSk7CiAgbm9OZXRDYXJkLmFwcGVuZENoaWxkKG5vTmV0Qm9keSk7CgogIGNvbnN0IGhlYWRsaW5lU2xvdCA9IGgoJ2RpdicsIG51bGwpOwogIGNvbnN0IGhvdXJzQmlnID0gaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oZXJvLCBmb250V2VpZ2h0OiA4MDAsIGNvbG9yOiBDLmFjY2VudCwgbGluZUhlaWdodDogMSwgbGV0dGVyU3BhY2luZzogJy0zcHgnIH0gfSk7CiAgY29uc3Qgc2V0SG91cnMgPSBjb3VudGVyKGhvdXJzQmlnLCBmbXROdW0pOwogIGNvbnN0IGhvdXJzQ2FyZCA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJywgcGFkZGluZzogJzI2cHggMThweCcsIGJhY2tncm91bmQ6IEMuc3VyZmFjZSwgYm9yZGVyUmFkaXVzOiAyMiwgYm9yZGVyOiBgMXB4IHNvbGlkICR7Qy5hY2NlbnR9MzBgIH0gfSwKICAgIGhvdXJzQmlnLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMywgY29sb3I6IEMudGV4dE1pZCwgbWFyZ2luVG9wOiAxNCwgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogOCB9IH0sICdob3VycyByZWxlYXNlZCBlYWNoIHdlZWsgJywKICAgICAgSW5mb1RpcCgnVGhlc2UgaG91cnMgZGVsaWJlcmF0ZWx5IHN0YXkgdGhlIHNhbWUgd2hlbiB5b3UgY2hhbmdlIHRoZSBjb25maWRlbmNlIGxldmVsOiB0aGV5IGNvbWUgZnJvbSBhdXRvbWF0aW5nIHRoZSBkYXktdG8tZGF5IGJvb2tpbmcgYW5kIG1hdGNoaW5nIHdvcmsgaXRzZWxmLCB3aGF0ZXZlciBzaGFyZSBvZiBhZ2VuY3kgd29yayBtb3ZlcyB0byBiYW5rLiBUaGUgY29uZmlkZW5jZSBsZXZlbCBzY2FsZXMgb25seSB0aGUgY2FzaCBzYXZpbmcuIE1vZGVsbGVkIGFzIHRlYW0gc2l6ZSDDlyAxIGhvdXIvZGF5IMOXIDUgZGF5cy4nKSksCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0TXV0ZWQsIG1hcmdpblRvcDogOCwgbGluZUhlaWdodDogMS41LCBtYXhXaWR0aDogMzYwLCBtYXJnaW5MZWZ0OiAnYXV0bycsIG1hcmdpblJpZ2h0OiAnYXV0bycgfSB9LCAiVGltZSB5b3VyIHRlbXBvcmFyeSBzdGFmZmluZyB0ZWFtIGdldHMgYmFjayBlYWNoIHdlZWsgYXMgU21hcnQgTWF0Y2ggYXV0b21hdGVzIHNoaWZ0IGJvb2tpbmcgYW5kIG1hdGNoaW5nLCBzY2FsZWQgdG8geW91ciB0ZWFtJ3Mgc2l6ZS4iKSk7CgogIGNvbnN0IGhlYWRsaW5lcyA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgLi4uZmx1aWRHcmlkKDMyMCksIGdhcDogMTgsIG1hcmdpbkJvdHRvbTogMTQgfSB9LCBoZWFkbGluZVNsb3QsIGhvdXJzQ2FyZCk7CgogIHRyYWNrKHJlcyA9PiB7CiAgICBjb25zdCBub05ldCA9IHJlcy5uZXRTYXZpbmcgPD0gMDsKICAgIGZpbGwoaGVhZGxpbmVTbG90LCBub05ldCA\/IG5vTmV0Q2FyZCA6IG5ldENhcmQpOwogICAgaWYgKG5vTmV0KSB7CiAgICAgIGZpbGwobm9OZXRCb2R5LCAnVGhlICcsIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dE1pZCB9IH0sIGAke2ZtdChyZXMucGxhdGZvcm1Db3N0KX0veXJgKSwgJyBsaWNlbmNlIGZlZSBpcyBsYXJnZXIgdGhhbiB0aGUgJywKICAgICAgICBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHRNaWQgfSB9LCBmbXRLKHJlcy5hZ2VuY3lTYXZpbmcpKSwKICAgICAgICAiIGFnZW5jeSBwcmVtaXVtIHlvdSdkIGRpc3BsYWNlIGhlcmUuIFRoZSB2YWx1ZSBhdCB0aGlzIHNpemUgaXMgdGhlIHJlbGVhc2VkIGNhcGFjaXR5IGFuZCB0aW1lIGJlbG93OyB0aGUgY2FzaCBjYXNlIGdyb3dzIHdpdGggYSBsYXJnZXIgYmFuayBvciBoaWdoZXIgYWdlbmN5IHJlbGlhbmNlLiIpOwogICAgfSBlbHNlIHsKICAgICAgc2V0TmV0KHJlcy5uZXRTYXZpbmcpOwogICAgICBmaWxsKG5ldFN1YiwgYFdoYXQgeW91IGNvdWxkIHNhdmUgZWFjaCB5ZWFyIGJ5IGZpbGxpbmcgbW9yZSBzaGlmdHMgZnJvbSB5b3VyIG93biBiYW5rIGluc3RlYWQgb2YgYWdlbmN5JHtyZXMuYWRtaW5TYXZpbmcgPiAwID8gYCwgcGx1cyAke2ZtdEsocmVzLmFkbWluU2F2aW5nKX0gb2YgYWRtaW4gdGltZWAgOiAnJ30sIHNob3duIGFzIGFuIGFubnVhbCBmaWd1cmUgYWZ0ZXIgdGhlICR7Zm10KHJlcy5wbGF0Zm9ybUNvc3QpfS95ciBsaWNlbmNlIGZlZS5gKTsKICAgIH0KICAgIHNldEhvdXJzKHJlcy50aW1lU2F2ZWRXZWVrKTsKICB9KTsKCiAgLyog4pSA4pSAIEd1YXJkcmFpbHMg4pSA4pSAICovCiAgY29uc3QgYmFubmVyID0gKGJvZHksIGJvcmRlckNvbG91ciwgYmcpID0+IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luQm90dG9tOiAxNCwgcGFkZGluZzogJzE0cHggMjBweCcsIGJhY2tncm91bmQ6IGJnIHx8IEMuYWNjZW50U29mdCwgYm9yZGVyOiBgMXB4IHNvbGlkICR7Ym9yZGVyQ29sb3VyIHx8IEMuYWNjZW50fWAsIGJvcmRlclJhZGl1czogMTQsIGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0LCBsaW5lSGVpZ2h0OiAxLjUsIGRpc3BsYXk6ICdub25lJyB9IH0sIGJvZHkpOwogIGNvbnN0IGV4Y2VlZHMgPSBiYW5uZXIoZnJhZyhoKCdzdHJvbmcnLCBudWxsLCAnQ2hlY2sgeW91ciBpbnB1dHMuJyksICcgVGhlIG1vZGVsbGVkIHNhdmluZyBleGNlZWRzIHlvdXIgYWdlbmN5IHNwZW5kLiBUcnkgYSBsb3dlciBwcmVtaXVtIG9yIGEgbG93ZXIgY29uZmlkZW5jZSBsZXZlbC4nKSk7CiAgY29uc3QgYWRtaW5Pbmx5ID0gYmFubmVyKGZyYWcoaCgnc3Ryb25nJywgbnVsbCwgJ0FkbWluIHRpbWUgb25seS4nKSwgJyBObyBhZ2VuY3kgcHJlbWl1bSBzYXZpbmcgaXMgbW9kZWxsZWQgKGFnZW5jeSBzcGVuZCBpcyB6ZXJvKSwgc28gdGhpcyBmaWd1cmUgaXMgdGhlIGFkbWluLXRpbWUgdmFsdWUgb24gaXRzIG93bi4nKSk7CiAgY29uc3QgaW1wbGF1c2libGUgPSBiYW5uZXIoZnJhZyhoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLmFtYmVyIH0gfSwgJ+KaoCBVbnVzdWFsbHkgaGlnaCByZXR1cm4uJyksICIgQXQgdGhlc2UgaW5wdXRzIHRoZSBtb2RlbGxlZCBzYXZpbmcgaXMgbW9yZSB0aGFuIDEwMCB0aW1lcyB0aGUgbGljZW5jZSBmZWUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgYSBmaWd1cmUgaGFzIGJlZW4gZW50ZXJlZCB3cm9uZ2x5IHJhdGhlciB0aGFuIGEgZ2VudWluZWx5IGxhcmdlIGJhbmsuIENoZWNrIHlvdXIgYWdlbmN5IHNwZW5kIGFuZCBsaWNlbmNlIGZlZSBiZWZvcmUgcXVvdGluZyBpdC4iKSwgQy5hbWJlciArICc2NicsIEMuc3VyZmFjZSk7CiAgdHJhY2socmVzID0+IHsKICAgIGNvbnN0IG5vTmV0ID0gcmVzLm5ldFNhdmluZyA8PSAwOwogICAgZXhjZWVkcy5zdHlsZS5kaXNwbGF5ID0gcmVzLmV4Y2VlZHNTcGVuZCA\/ICdibG9jaycgOiAnbm9uZSc7CiAgICBhZG1pbk9ubHkuc3R5bGUuZGlzcGxheSA9IChyZXMuYWRtaW5Pbmx5ICYmICFub05ldCkgPyAnYmxvY2snIDogJ25vbmUnOwogICAgaW1wbGF1c2libGUuc3R5bGUuZGlzcGxheSA9IChyZXMuaW1wbGF1c2libGVSb2kgJiYgIW5vTmV0KSA\/ICdibG9jaycgOiAnbm9uZSc7CiAgfSk7CgogIC8qIOKUgOKUgCBLUEkgdGlsZXMuIFRoZSBhZG1pbiB0aWxlIG9ubHkgZXhpc3RzIHdoZW4gYWRtaW4gdGltZSBpcyBpbiB0aGUgdG90YWwsCiAgICAgc28gdGhlIHJvdyBpcyByZWJ1aWx0IHdoZW4gdGhhdCBjaGFuZ2VzOyB0aGUgZmlndXJlcyBpbnNpZGUgYW5pbWF0ZS4g4pSA4pSAICovCiAgY29uc3Qga3BpUm93ID0gaCgnZGl2JywgeyBjbGFzczogJ2twaS1ncmlkLTMnIH0pOwogIGxldCBrcGlIYXNBZG1pbiA9IG51bGw7CiAgbGV0IHNldFByZW1pdW0sIHNldFJldHVybiwgcGF5YmFja1ZhbCwgcmV0dXJuV3JhcCwgcmV0TnVtOwogIHRyYWNrKHJlcyA9PiB7CiAgICBjb25zdCBub05ldCA9IHJlcy5uZXRTYXZpbmcgPD0gMDsKICAgIGNvbnN0IHdpdGhBZG1pbiA9IHJlcy5hZG1pblNhdmluZyA+IDA7CiAgICBpZiAod2l0aEFkbWluICE9PSBrcGlIYXNBZG1pbikgewogICAgICBrcGlIYXNBZG1pbiA9IHdpdGhBZG1pbjsKICAgICAgY29uc3QgdGVhbVNpemUgPSBNYXRoLnJvdW5kKHJlcy50aW1lU2F2ZWRXZWVrIC8gKEFETUlOX0hSU19QRVJfREFZICogNSkpOwogICAgICBjb25zdCBhZG1pblRpcCA9IGAke3RlYW1TaXplfSAke3RlYW1TaXplID09PSAxID8gJ3BlcnNvbicgOiAncGVvcGxlJ30gw5cgJHtBRE1JTl9IUlNfUEVSX0RBWX0gaC9kYXkgw5cgJHtBRE1JTl9XT1JLSU5HX0RBWVN9IHdvcmtpbmcgZGF5cyDDlyDCoyR7QURNSU5fTE9BREVEX0hPVVJMWX0vaCAobG9hZGVkKSA9ICR7Zm10KHJlcy5hZG1pblNhdmluZyl9YDsKICAgICAgY29uc3QgcHJlbWl1bVZhbCA9IGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snIH0gfSk7CiAgICAgIHNldFByZW1pdW0gPSBjb3VudGVyKHByZW1pdW1WYWwsIGZtdEspOwogICAgICBjb25zdCBhZG1pblZhbCA9IGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snIH0gfSk7CiAgICAgIGNvbnN0IHNldEFkbWluID0gd2l0aEFkbWluID8gY291bnRlcihhZG1pblZhbCwgZm10SykgOiBudWxsOwogICAgICBwYXliYWNrVmFsID0gaCgnc3BhbicsIG51bGwpOwogICAgICByZXROdW0gPSBoKCdzcGFuJywgeyBzdHlsZTogeyBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyB9IH0pOwogICAgICByZXR1cm5XcmFwID0gaCgnc3BhbicsIG51bGwsIHJldE51bSk7CiAgICAgIHNldFJldHVybiA9IGNvdW50ZXIocmV0TnVtLCBmbXRNdWx0aXBsZSk7CiAgICAgIGNvbnN0IHRpbGVzID0gWwogICAgICAgIEtwaVRpbGUoeyBpY29uS2V5OiAncG91bmQnLCBsYWJlbDogJ0FnZW5jeSBwcmVtaXVtIGF2b2lkZWQnLCB2YWx1ZTogcHJlbWl1bVZhbCwgc3ViOiAnYWdlbmN5IHZzIGJhbmsgZ2FwLCBleGNsdWRpbmcgbGljZW5jZSBmZWUnIH0pLAogICAgICAgIC4uLih3aXRoQWRtaW4gPyBbS3BpVGlsZSh7IGljb25LZXk6ICdjbG9jaycsIGxhYmVsOiAnQWRtaW4gdGltZSBzYXZpbmcnLCB2YWx1ZTogYWRtaW5WYWwsIHN1YjogJ3RlbXAgc3RhZmZpbmcgdGVhbSB0aW1lLCB2YWx1ZWQnLCB0aXA6IGFkbWluVGlwIH0pXSA6IFtdKSwKICAgICAgICBLcGlUaWxlKHsgaWNvbktleTogJ2NhbGVuZGFyJywgbGFiZWw6ICdQYXliYWNrJywgdmFsdWU6IHBheWJhY2tWYWwsIHN1YjogJ3RvIHJlY292ZXIgdGhlIGFubnVhbCBsaWNlbmNlIGZlZScgfSksCiAgICAgICAgS3BpVGlsZSh7IGljb25LZXk6ICdjaGVjaycsIGxhYmVsOiAnUmV0dXJuJywgdmFsdWU6IHJldHVybldyYXAsIHN1YjogJ25ldCBzYXZpbmcgw7cgbGljZW5jZSBmZWUsIHBlciB5ZWFyJyB9KSwKICAgICAgXTsKICAgICAga3BpUm93LmNsYXNzTmFtZSA9IHRpbGVzLmxlbmd0aCA9PT0gNCA\/ICdrcGktZ3JpZC00JyA6ICdrcGktZ3JpZC0zJzsKICAgICAgZmlsbChrcGlSb3csIC4uLnRpbGVzKTsKICAgICAgaWYgKHNldEFkbWluKSBzZXRBZG1pbihyZXMuYWRtaW5TYXZpbmcpOwogICAgfQogICAgc2V0UHJlbWl1bShyZXMuYWdlbmN5U2F2aW5nKTsKICAgIHBheWJhY2tWYWwudGV4dENvbnRlbnQgPSBub05ldCA\/ICduL2EnIDogZm10UGF5YmFjayhyZXMucGF5YmFja01vbnRocyk7CiAgICBpZiAocmVzLnJvaU11bHRpcGxlID09IG51bGwgfHwgbm9OZXQpIHsgZmlsbChyZXR1cm5XcmFwLCAnbi9hJyk7IH0KICAgIGVsc2UgeyBmaWxsKHJldHVybldyYXAsIHJlcy5pbXBsYXVzaWJsZVJvaSA\/ICfimqAgJyA6ICcnLCByZXROdW0pOyBzZXRSZXR1cm4ocmVzLnJvaU11bHRpcGxlKTsgfQogIH0pOwoKICBjb25zdCBhbm51YWxOb3RlID0gaCgnZGl2JywgeyBzdHlsZTogeyB0ZXh0QWxpZ246ICdjZW50ZXInLCBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE11dGVkLCBsaW5lSGVpZ2h0OiAxLjUsIG1hcmdpbjogJzAgYXV0byAyOHB4JywgbWF4V2lkdGg6IDc2MCB9IH0sCiAgICAnVGhlc2UgYXJlIGFubnVhbCBmaWd1cmVzOiB0aGUgc2F2aW5nIHJlY3VycyBldmVyeSB5ZWFyIFNtYXJ0IE1hdGNoIGlzIGluIHVzZS4nKTsKICB0cmFjayhyZXMgPT4geyBhbm51YWxOb3RlLnN0eWxlLmRpc3BsYXkgPSByZXMubmV0U2F2aW5nIDw9IDAgPyAnbm9uZScgOiAnYmxvY2snOyB9KTsKCiAgLyog4pSA4pSAIEhvdyB0aGUgY2FzaCBzYXZpbmcgaXMgd29ya2VkIG91dCDilIDilIAgKi8KICBjb25zdCBiYW5rUm93ID0gaCgnc3BhbicsIG51bGwpLCBhZ2VuY3lSb3cgPSBoKCdzcGFuJywgbnVsbCksIGdhcFJvdyA9IGgoJ3NwYW4nLCBudWxsKTsKICBjb25zdCBhZ2VuY3lMYWJlbCA9IGgoJ3NwYW4nLCBudWxsKTsKICBjb25zdCBzdW1tYXJ5TGluZSA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAxNCwgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHRNaWQsIGxpbmVIZWlnaHQ6IDEuNiB9IH0pOwogIGNvbnN0IGVxdWF0aW9uID0gaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW5Ub3A6IDEyLCBwYWRkaW5nOiAnMTRweCAxOHB4JywgYmFja2dyb3VuZDogQy5hY2NlbnRTb2Z0LCBib3JkZXJSYWRpdXM6IDEyLCBib3JkZXI6IGAxcHggc29saWQgJHtDLmFjY2VudH0zMGAsIGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0TWlkLCBsaW5lSGVpZ2h0OiAxLjcgfSB9KTsKICBjb25zdCBmb290bm90ZSA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAxNCwgZm9udFNpemU6IEYudGlueSwgY29sb3I6IEMudGV4dE11dGVkLCBmb250U3R5bGU6ICdpdGFsaWMnLCBsaW5lSGVpZ2h0OiAxLjYgfSB9KTsKCiAgY29uc3Qgd29ya2VkT3V0ID0gQ2FyZCh7IG1hcmdpbkJvdHRvbTogMjgsIGJvcmRlckxlZnQ6IGAzcHggc29saWQgJHtDLmFjY2VudE1pZH1gIH0sCiAgICBDVGl0bGUoJ3BvdW5kJywgJ0hvdyB0aGUgY2FzaCBzYXZpbmcgaXMgd29ya2VkIG91dCcsIEMuYWNjZW50TWlkKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHQsIGxpbmVIZWlnaHQ6IDEuNywgbWFyZ2luQm90dG9tOiAxNCB9IH0sCiAgICAgICdUaGUgc2F2aW5nIGlzIHRoZSAnLCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLmFjY2VudCB9IH0sICdleHRyYScpLCAnIGFuIGFnZW5jeSBjaGFyZ2VzIGZvciBhIHNoaWZ0LCBvdmVyIHdoYXQgdGhlIHNhbWUgc2hpZnQgd291bGQgY29zdCBvbiB5b3VyIG93biBiYW5rOiB0aGUgcHJlbWl1bSwgbm90IHRoZSB3aG9sZSBhZ2VuY3kgYmlsbC4gV2Ugb25seSBjb3VudCBpdCBvbiB0aGUgc2hpZnRzIHlvdSBjYW4gcmVhbGlzdGljYWxseSBtb3ZlIGZyb20gYWdlbmN5IHRvIHlvdXIgYmFuay4nKSwKICAgIFJvdyhoKCdzcGFuJywgeyBzdHlsZTogeyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgJ1lvdXIgb3duIGJhbmsgKGJsZW5kZWQgcmF0ZSwgYWxsLWluKSAnLAogICAgICBJbmZvVGlwKGBBbHJlYWR5IGluY2x1ZGVzIGEgJHtNYXRoLnJvdW5kKEJBTktfT05DT1NUICogMTAwKX0lIGVtcGxveWVyIG9uLWNvc3QgKGVtcGxveWVyIE5JIGFuZCBwZW5zaW9uKSBvbiB0b3Agb2YgcmF3IEFnZW5kYSBmb3IgQ2hhbmdlIHBheSwgYmVsb3cgdGhlIGZ1bGwgfjMwJSBOSFMgcmF0ZSBiZWNhdXNlIGJhbmstb25seSB3b3JrZXJzIG9mdGVuIG9wdCBvdXQgb2YgdGhlIHBlbnNpb24uIFRoaXMgaXMgdGhlIHRydWUgY29zdCBvZiBhIGJhbmsgc2hpZnQ7IHRoZSBzYXZpbmcgaXMgdGhlIGdhcCBiZXR3ZWVuIGl0IGFuZCB0aGUgYWdlbmN5IHJhdGUsIHNvIG9uLWNvc3RzIGFyZSBjb3VudGVkIG9uY2UsIG5ldmVyIHR3aWNlLmApKSwgYmFua1JvdyksCiAgICBSb3coYWdlbmN5TGFiZWwsIGFnZW5jeVJvdyksCiAgICBSb3coJ1ByZW1pdW0gZGlzcGxhY2VkID0gdGhlIHNhdmluZycsIGdhcFJvdywgdHJ1ZSksCiAgICBzdW1tYXJ5TGluZSwgZXF1YXRpb24sIGZvb3Rub3RlKTsKCiAgY29uc3QgcmF0ZSA9IChzaGlmdCwgaHIpID0+IGZyYWcoZm10KHNoaWZ0KSwgaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYudGlueSwgY29sb3I6IEMudGV4dE11dGVkLCBmb250V2VpZ2h0OiA0MDAgfSB9LCBgIC9zaGlmdCDCtyDCoyR7KGhyIHx8IDApLnRvRml4ZWQoMil9L2hyYCkpOwogIHRyYWNrKHJlcyA9PiB7CiAgICBjb25zdCBocnMgPSByZXMuc2hpZnRIb3VycyB8fCA4OwogICAgY29uc3QgYmFua0hyID0gcmVzLmJhbmtTaGlmdENvc3QgLyBocnMsIGFnZW5jeUhyID0gcmVzLmFnZW5jeVNoaWZ0Q29zdCAvIGhyczsKICAgIGNvbnN0IGdhcFNoaWZ0ID0gcmVzLmFnZW5jeVNoaWZ0Q29zdCAtIHJlcy5iYW5rU2hpZnRDb3N0LCBnYXBIciA9IGdhcFNoaWZ0IC8gaHJzOwogICAgLy8gUm91bmQgZWFjaCB0ZXJtIGZpcnN0IHNvIHRoZSBkaXNwbGF5ZWQgcHJlbWl1bSAtIGxpY2VuY2UgPSBuZXQgZXF1YXRpb24gYWRkcyB1cCBleGFjdGx5LgogICAgY29uc3QgZ3Jvc3NSID0gTWF0aC5yb3VuZChyZXMuYWdlbmN5U2F2aW5nKSwgYWRtaW5SID0gTWF0aC5yb3VuZChyZXMuYWRtaW5TYXZpbmcgfHwgMCksIGxpY1IgPSBNYXRoLnJvdW5kKHJlcy5wbGF0Zm9ybUNvc3QpLCBuZXRSID0gZ3Jvc3NSICsgYWRtaW5SIC0gbGljUjsKICAgIGZpbGwoYmFua1JvdywgcmF0ZShyZXMuYmFua1NoaWZ0Q29zdCwgYmFua0hyKSk7CiAgICBmaWxsKGFnZW5jeVJvdywgcmF0ZShyZXMuYWdlbmN5U2hpZnRDb3N0LCBhZ2VuY3lIcikpOwogICAgZmlsbChnYXBSb3csIHJhdGUoZ2FwU2hpZnQsIGdhcEhyKSk7CiAgICBhZ2VuY3lMYWJlbC50ZXh0Q29udGVudCA9IHJlcy5wZXJHcm91cFByZW1pdW0gPyAnQWdlbmN5LCBzYW1lIHNoaWZ0ICh5b3VyIHBlci1ncm91cCBwcmVtaXVtcyknIDogYEFnZW5jeSwgc2FtZSBzaGlmdCAoYXQgJHtyZXMucHJlbWl1bX0lIHByZW1pdW0pYDsKICAgIGZpbGwoc3VtbWFyeUxpbmUsIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sIGDCoyR7Z2FwSHIudG9GaXhlZCgyKX0vaHJgKSwgJyBvbiBlYWNoIG9mICcsCiAgICAgIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sIGZtdE51bShyZXMuZGlzcGxhY2VkKSksICcgc2hpZnRzIG1vdmVkIHRvIGJhbmsgPSAnLAogICAgICBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCBmbXQocmVzLmFnZW5jeVNhdmluZykpLCAnIGdyb3NzIGEgeWVhci4nKTsKICAgIGVxdWF0aW9uLnN0eWxlLmRpc3BsYXkgPSByZXMucGxhdGZvcm1Db3N0ID4gMCA\/ICdibG9jaycgOiAnbm9uZSc7CiAgICBmaWxsKGVxdWF0aW9uLCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCBmbXQoZ3Jvc3NSKSksICcgcHJlbWl1bScsCiAgICAgIGFkbWluUiA+IDAgPyBmcmFnKCcgKyAnLCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCBmbXQoYWRtaW5SKSksICcgYWRtaW4gdGltZScpIDogJycsCiAgICAgICcg4oiSICcsIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sIGZtdChsaWNSKSksICcgbGljZW5jZSBmZWUgPSAnLAogICAgICBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBuZXRSID4gMCA\/IEMuYWNjZW50IDogQy5hbWJlciB9IH0sIG5ldFIgPj0gMCA\/IGZtdChuZXRSKSA6ICfiiJInICsgZm10KC1uZXRSKSksCiAgICAgICcgbmV0JywgbmV0UiA+IDAgPyAnLCB0aGUgaGVhZGxpbmUgc2F2aW5nIHNob3duIGF0IHRoZSB0b3AuJyA6ICcsIHNvIHRoZSBsaWNlbmNlIGZlZSBpcyBsYXJnZXIgdGhhbiB0aGUgcHJlbWl1bSBhdCB0aGVzZSBpbnB1dHMuJyk7CiAgICBmaWxsKGZvb3Rub3RlLCBgQmFuayByYXRlID0gMjAyNi8yNyBBZkMgYmxlbmRlZCBtaWRwb2ludCwgYWxyZWFkeSBpbmNsdWRpbmcgYSAke01hdGgucm91bmQoQkFOS19PTkNPU1QgKiAxMDApfSUgZW1wbG95ZXIgb24tY29zdCAoZW1wbG95ZXIgTkkgYW5kIHBlbnNpb24sIGJlbG93IHRoZSBmdWxsIH4zMCUgTkhTIHJhdGUgYmVjYXVzZSBiYW5rLW9ubHkgd29ya2VycyBvZnRlbiBvcHQgb3V0IG9mIHRoZSBwZW5zaW9uKSwgc28gb24tY29zdHMgYXJlIGNvdW50ZWQgb25jZSBhbmQgbmV2ZXIgYWRkZWQgb24gdG9wLiBQcmVtaXVtIGRlZmF1bHRzIHRvIH4yMCUsIHJlZmxlY3RpbmcgZmlndXJlcyBjaXRlZCBpbiBIb3VzZSBvZiBDb21tb25zIExpYnJhcnkgcmVzZWFyY2gsIGRlbGliZXJhdGVseSBjb25zZXJ2YXRpdmU7IGl0IHZhcmllcyB3aWRlbHkgYnkgcm9sZSBhbmQgc2hpZnQgKG51cnNpbmcgfjM1LTUwJSwgbWVkaWNzIH44MC0xMjAlKSwgc28gdXNlIHlvdXIgb3duIHJhdGVzIHdoZXJlIGtub3duLmAsCiAgICAgIHJlcy5hZ2VuY3lTcGVuZCAhPSBudWxsCiAgICAgICAgPyAobGVhZENvbnRleHQgJiYgbGVhZENvbnRleHQuYWdlbmN5U3BlbmQgIT0gbnVsbAogICAgICAgICAgPyAnIEFnZW5jeSBzcGVuZCBpcyB0aGUgYW5udWFsIGZpZ3VyZSB5b3Ugc3VwcGxpZWQsIHdoaWNoIGFuY2hvcnMgdGhlIHNhdmluZy4nCiAgICAgICAgICA6IGAgQWdlbmN5IHNwZW5kIGlzIGVzdGltYXRlZCBmcm9tIHlvdXIgYmFuayBzaXplIHVzaW5nIEZZMjAyNS8yNiBuYXRpb25hbCBhdmVyYWdlcyAofiR7Zm10KEFHRU5DWV9TUEVORF9QRVJfUkVHSVNURVJFRF9CQU5LX1dPUktFUl9HQlApfSBwZXIgcmVnaXN0ZXJlZCBiYW5rIHdvcmtlciksIHdoaWNoIGFuY2hvcnMgdGhlIHNhdmluZy5gKQogICAgICAgIDogJycpOwogIH0pOwoKICAvKiDilIDilIAgQ2FwYWNpdHkgYW5kIHdpZGVyIHZhbHVlIOKUgOKUgCAqLwogIGNvbnN0IHNoaWZ0c1ZhbCA9IGgoJ3NwYW4nLCBudWxsKSwgYmFja2ZpbGxWYWwgPSBoKCdzcGFuJywgbnVsbCksIHJlbGlhbmNlVmFsID0gaCgnc3BhbicsIG51bGwpOwogIGNvbnN0IHNldFNoaWZ0cyA9IGNvdW50ZXIoc2hpZnRzVmFsLCBmbXROdW0pLCBzZXRCYWNrZmlsbCA9IGNvdW50ZXIoYmFja2ZpbGxWYWwsIGZtdEspOwogIGNvbnN0IGNhcGFjaXR5ID0gQ2FyZCh7IG1hcmdpbkJvdHRvbTogMjgsIGJvcmRlckxlZnQ6IGAzcHggc29saWQgJHtDLmJsdWV9YCB9LAogICAgQ1RpdGxlKCdjYWxlbmRhcicsICdDYXBhY2l0eSBhbmQgd2lkZXIgdmFsdWUnLCBDLmJsdWUpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE1pZCwgbGluZUhlaWdodDogMS42LCBtYXJnaW5Cb3R0b206IDE2IH0gfSwKICAgICAgJ0ZpbGxpbmcgbW9yZSBzaGlmdHMgZnJvbSB5b3VyIG93biBiYW5rIGlzIHJlYWwgb3BlcmF0aW9uYWwgdmFsdWU6IHN0ZWFkaWVyIHJvc3RlcnMsIGJldHRlciBjb250aW51aXR5IG9mIGNhcmUgYW5kIGxlc3MgbGFzdC1taW51dGUgcmVsaWFuY2Ugb24gYWdlbmN5LiBJdCBpcyBkZWxpYmVyYXRlbHkga2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBjYXNoIHNhdmluZyBhYm92ZSBhbmQgaXMgbmV2ZXIgYWRkZWQgdG8gaXQuJyksCiAgICBSb3coJ01vcmUgc2hpZnRzIGZpbGxlZCBmcm9tIHlvdXIgb3duIGJhbmsgZWFjaCB5ZWFyIChvZmYgYWdlbmN5KScsIHNoaWZ0c1ZhbCksCiAgICBSb3coJ0JhbmsgYmFja2ZpbGwgY29zdCAoc3BlbmQsIG5vdCBzYXZpbmcpJywgYmFja2ZpbGxWYWwpLAogICAgUm93KCdBZ2VuY3kgcmVsaWFuY2UgcmVkdWNlZCcsIHJlbGlhbmNlVmFsKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgbWFyZ2luVG9wOiAxNiwgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHRNaWQsIGxpbmVIZWlnaHQ6IDEuNyB9IH0sCiAgICAgICJUaGVzZSBmaWd1cmVzIGNhcHR1cmUgY2FzaCBzYXZpbmdzIG9ubHkuIFNtYXJ0IE1hdGNoIGFsc28gc3VwcG9ydHMgc2FmZXIgc3RhZmZpbmcsIGJldHRlciBjb250aW51aXR5IG9mIGNhcmUgYW5kIGEgZmFpcmVyLCBtb3JlIGZsZXhpYmxlIGV4cGVyaWVuY2UgZm9yIHlvdXIgYmFuayB3b3JrZXJzLCByZWFsIGJlbmVmaXRzIHdlJ3ZlIGRlbGliZXJhdGVseSBub3QgcHV0IGEgcG91bmQgZmlndXJlIG9uLiIpKTsKICB0cmFjayhyZXMgPT4gewogICAgc2V0U2hpZnRzKHJlcy5kaXNwbGFjZWQpOyBzZXRCYWNrZmlsbChyZXMuY2FwYWNpdHlWYWx1ZSk7CiAgICBmaWxsKHJlbGlhbmNlVmFsLCBgJHtmbXRQY3QxKHJlcy5maWxsTm93KX0g4oaSIGAsIGgoJ3NwYW4nLCB7IHN0eWxlOiB7IGNvbG9yOiBDLmdvb2QsIGZvbnRXZWlnaHQ6IDgwMCB9IH0sIGZtdFBjdDEocmVzLmZpbGxBZnRlcikpKTsKICB9KTsKCiAgLyog4pSA4pSAIEhvbmVzdCBmcmFtaW5nIChtYW5kYXRvcnkpIOKUgOKUgCAqLwogIGNvbnN0IGhvbmVzdCA9IENhcmQoeyBtYXJnaW5Cb3R0b206IDI4LCBib3JkZXJMZWZ0OiBgM3B4IHNvbGlkICR7Qy5hbWJlcn1gIH0sCiAgICBDVGl0bGUoJ2xpZ2h0YnVsYicsICdIb3cgdG8gcmVhZCB0aGVzZSBudW1iZXJzJywgQy5hbWJlciksCiAgICBoKCd1bCcsIHsgc3R5bGU6IHsgbWFyZ2luOiAwLCBwYWRkaW5nTGVmdDogMjIsIGZvbnRTaXplOiBGLnNtYWxsLCBjb2xvcjogQy50ZXh0TWlkLCBsaW5lSGVpZ2h0OiAxLjc1IH0gfSwKICAgICAgaCgnbGknLCBudWxsLCAnVGhlc2UgZmlndXJlcyBhcmUgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ2luZGljYXRpdmUnKSwgJywgbm90IGEgZ3VhcmFudGVlIG9yIGEgcXVvdGUuJyksCiAgICAgIGgoJ2xpJywgbnVsbCwgJ1RoZSBldmlkZW5jZSBjb21lcyBmcm9tIGEgcGlsb3Qgc3R1ZHksIGEgc21hbGwgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ3R3by1zaXRlIHZlbmRvciBzYW1wbGUgd2l0aGluIGEgZm91ci10cnVzdCBwcm9ncmFtbWUnKSwgJywgYW5vbnltaXNlZCBoZXJlIGFzICJhIGNvbW11bml0eSB0cnVzdCIgYW5kICJhbiBhY3V0ZSB0cnVzdCIuIFJlc3VsdHMgYXJlIG5vdCBzb2xlbHkgYXR0cmlidXRhYmxlIHRvIFNtYXJ0IE1hdGNoLicpLAogICAgICBoKCdsaScsIG51bGwsICdUaGUgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ2FnZW5jeSBwcmVtaXVtIHZhcmllcyBieSByb2xlIGFuZCBzaGlmdCcpLCAiOyB0aGUgbW9kZWwgaXMgbW9zdCBjcmVkaWJsZSB3aGVuIHJ1biBvbiB5b3VyIG93biBvcmdhbmlzYXRpb24ncyByYXRlcy4iKSwKICAgICAgaCgnbGknLCBudWxsLCAnQmV0dGVyIGJhbmsgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ3V0aWxpc2F0aW9uIGlzIHRoZSBtZWNoYW5pc20nKSwgJzsgdGhlIGNhc2ggaXMgdGhlIGFnZW5jeSBwcmVtaXVtIGRpc3BsYWNlZC4gQ2FwYWNpdHkgZ2FpbmVkIGlzIGNvdmVyYWdlLCBub3QgY2FzaCwgYW5kIGlzIHJlcG9ydGVkIHNlcGFyYXRlbHkgYWJvdmUuJykpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBtYXJnaW5Ub3A6IDE2LCBwYWRkaW5nOiAnMTRweCAxOHB4JywgYmFja2dyb3VuZDogQy5zdXJmYWNlMiwgYm9yZGVyUmFkaXVzOiAxMiwgZm9udFNpemU6IEYuc21hbGwsIGNvbG9yOiBDLnRleHRNaWQsIGxpbmVIZWlnaHQ6IDEuNjUsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYm9yZGVyTGlnaHR9YCB9IH0sCiAgICAgIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sICdTdHJhdGVnaWNhbGx5JyksICcsIHJlbGVhc2luZyBjYXNoIGFuZCBjYXBhY2l0eSBmcm9tIHRlbXBvcmFyeSBzdGFmZmluZyBzdXBwb3J0cyB0aGUgJywKICAgICAgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ05IUyAxMCBZZWFyIFBsYW4nKSwgJyBhbmQgV29ya2ZvcmNlIFBhcGVyLCBhbmQgdGhlICcsCiAgICAgIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sICdTdGFmZiBIZWFsdGggJiBXZWxsYmVpbmcgQ1FVSU4nKSwgJy4nKSk7CgogIC8qIOKUgOKUgCBNZXRob2RvbG9neSDilIDilIAgKi8KICBjb25zdCBtZXRob2RCb2R5ID0gaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dE1pZCwgbGluZUhlaWdodDogMS43NSB9IH0sCiAgICBoKCdwJywgeyBzdHlsZTogeyBtYXJnaW5Ub3A6IDAgfSB9LCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCAnVGhlIGNhc2ggc2F2aW5nJyksICcgaXMgdGhlIGFnZW5jeSBwcmVtaXVtIGRpc3BsYWNlZCB3aGVuIGltcHJvdmVkIHV0aWxpc2F0aW9uIG1vdmVzIHRlbXAgZHV0aWVzIG9mZiBhZ2VuY3kgb250byB5b3VyIG93biBiYW5rOicpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250RmFtaWx5OiAndWktbW9ub3NwYWNlLCBtb25vc3BhY2UnLCBmb250U2l6ZTogRi5zbWFsbCwgY29sb3I6IEMudGV4dCwgYmFja2dyb3VuZDogQy5iZywgcGFkZGluZzogJzEycHggMTRweCcsIGJvcmRlclJhZGl1czogMTAsIG1hcmdpbkJvdHRvbTogMTQsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYm9yZGVyTGlnaHR9YCB9IH0sCiAgICAgICdhZ2VuY3lfc2F2aW5nID0gZGlzcGxhY2VkX2R1dGllcyDDlyBiYW5rX3NoaWZ0X2Nvc3Qgw5cgcHJlbWl1bScpLAogICAgaCgncCcsIG51bGwsICdGaWxsaW5nIGEgYmFuayBzaGlmdCBpcyBpdHNlbGYgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ2V4cGVuZGl0dXJlJyksICc7IG9ubHkgdGhlIGdhcCBiZXR3ZWVuIGFuIGFnZW5jeSBzaGlmdCBhbmQgdGhlIGVxdWl2YWxlbnQgYmFuayBzaGlmdCAodGhlIHByZW1pdW0pIGlzIGNhc2ggcmVsZWFzZWQuIFRoZSBwcmVtaXVtIGhlcmUgaXMgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJzIwJScpLCAiLCBhIHN0YXJ0aW5nIHBvaW50IHRoYXQgdmFyaWVzIGJ5IHJvbGUgYW5kIHNoaWZ0OyB0aGUgbW9kZWwgaXMgbW9zdCBjcmVkaWJsZSBvbiB5b3VyIG93biBvcmdhbmlzYXRpb24ncyByYXRlcy4iKSwKICAgIGgoJ3AnLCBudWxsLCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCAnQWRtaW4gdGltZSBzYXZpbmcnKSwgJyB1c2VzIGEgcGVyLXBlcnNvbiBtb2RlbDogZWFjaCBtZW1iZXIgb2YgdGhlIHRlbXBvcmFyeSBzdGFmZmluZyB0ZWFtIHJlY292ZXJzIGEgY29uc2VydmF0aXZlICcsIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sICcxIGhvdXIvZGF5JyksICcgYWNyb3NzIDIyNSB3b3JraW5nIGRheXMsIHZhbHVlZCBhdCBhIGxvYWRlZCDCozE4L2hvdXIgKHNvbWUgdGVhbXMgcmVwb3J0IHVwIHRvIDIuNSBob3Vycy9kYXk7IHdlIGRlbGliZXJhdGVseSB1c2UgMSkuIFRoZSBzYW1lIGhvdXJzIGZlZWQgdGhlICJ0aW1lIHNhdmVkIHBlciB3ZWVrIiBjby1oZWFkbGluZS4nKSwKICAgIGgoJ3AnLCBudWxsLCAnUGF5IGFzc3VtcHRpb25zIHVzZSAnLCBoKCdzdHJvbmcnLCB7IHN0eWxlOiB7IGNvbG9yOiBDLnRleHQgfSB9LCAnMjAyNi8yNyBOSFMgQWdlbmRhIGZvciBDaGFuZ2UgbWlkcG9pbnRzJyksICcgKCszLjMlOyBhIGJhbmQtbWl4IHdlaWdodGVkIGJsZW5kZWQgYmFuayBwYXkpLCAxLDk1Ny41IEFmQyBob3Vycy95ZWFyLCA4LWhvdXIgc2hpZnRzIGFuZCBhICcsIGgoJ3N0cm9uZycsIHsgc3R5bGU6IHsgY29sb3I6IEMudGV4dCB9IH0sIGAke01hdGgucm91bmQoQkFOS19PTkNPU1QgKiAxMDApfSUgZW1wbG95ZXIgb24tY29zdCAoZW1wbG95ZXIgTkkgYW5kIHBlbnNpb24pYCksIGAsIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIG1vZGVsbGVkIGJhbmsgc2hpZnQgY29zdHMgYW5kIG5ldmVyIGFkZGVkIG9uIHRvcC4gUGF5LCBob3VycyBhbmQgb24tY29zdCBzZXQgdGhlIG1vZGVsbGVkIHNoaWZ0IGNvdW50cywgbm90IHRoZSBjYXNoIHNhdmluZywgd2hpY2ggaXMgYW5jaG9yZWQgdG8gYWdlbmN5IHNwZW5kLCBwcmVtaXVtIGFuZCBjb25maWRlbmNlIGxldmVsLiBBZ2VuY3kgc3BlbmQgaXMgZXN0aW1hdGVkIGF0IH7CoyR7QUdFTkNZX1NQRU5EX1BFUl9SRUdJU1RFUkVEX0JBTktfV09SS0VSX0dCUC50b0xvY2FsZVN0cmluZygnZW4tR0InKX0gcGVyIHJlZ2lzdGVyZWQgYmFuayB3b3JrZXIgKEZZMjAyNS8yNiksIHNjYWxlZCBmcm9tIHlvdXIgYmFuayBzaXplLiBSYXRlIGFzc3VtcHRpb25zIGFyZSBkZWxpYmVyYXRlbHkgY29uc2VydmF0aXZlOyB0aGUgY29uZmlkZW5jZSBsZXZlbCBpcyB5b3VycyB0byBzZXQuYCksCiAgICBoKCdwJywgeyBzdHlsZTogeyBtYXJnaW5Cb3R0b206IDAgfSB9LCAnT3V0cHV0cyBhcmUgJywgaCgnc3Ryb25nJywgeyBzdHlsZTogeyBjb2xvcjogQy50ZXh0IH0gfSwgJ2luZGljYXRpdmUnKSwgJyBhbmQgYXJlIHJlY29tcHV0ZWQgbGl2ZSBhcyB5b3UgYWRqdXN0IHRoZSBjb25maWRlbmNlIGxldmVsIGFib3ZlLicpKTsKICBjb25zdCBtZXRob2RvbG9neSA9IENhcmQoeyBtYXJnaW5Cb3R0b206IDI4LCBib3JkZXJMZWZ0OiBgM3B4IHNvbGlkICR7Qy5zZWFmb2FtfWAgfSwgQ29sbGFwc2libGUoJ0hvdyB3ZSBjYWxjdWxhdGVkIHRoaXMnLCBtZXRob2RCb2R5KSk7CgogIC8qIOKUgOKUgCBBY3Rpb25zIOKUgOKUgCAqLwogIGNvbnN0IGFjdGlvbnMgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAxNCwganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBmbGV4V3JhcDogJ3dyYXAnLCBwYWRkaW5nOiAnOHB4IDAgMzJweCcgfSB9LAogICAgaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgc3R5bGU6IHsgcGFkZGluZzogJzE0cHggMzJweCcsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogYDJweCBzb2xpZCAke0MuYWNjZW50fWAsIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsIGNvbG9yOiBDLmFjY2VudCwgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNzAwLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnIH0sIG9uQ2xpY2s6IG9uQWRqdXN0IH0sICfihpAgQWRqdXN0IGlucHV0cycpLAogICAgaCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJywgc3R5bGU6IHsgcGFkZGluZzogJzE0cHggMzJweCcsIGJvcmRlclJhZGl1czogMTQsIGJvcmRlcjogYDFweCBzb2xpZCAke0MuYm9yZGVyfWAsIGJhY2tncm91bmQ6IEMuc3VyZmFjZSwgY29sb3I6IEMudGV4dE1pZCwgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNjAwLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnIH0sIG9uQ2xpY2s6IG9uU3RhcnRPdmVyIH0sICdTdGFydCBvdmVyIOKGuycpKTsKCiAgY29uc3QgcGFnZSA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgYW5pbWF0aW9uOiAncmZhZGUgLjVzIGVhc2Utb3V0JyB9IH0sCiAgICBzdHlsZSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJywgcGFkZGluZzogJzE0cHggMCA0cHgnIH0gfSwKICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi50aW55LCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBDLnRleHRNdXRlZCwgbGV0dGVyU3BhY2luZzogNCwgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScgfSB9LCAnU21hcnQgTWF0Y2ggwrcgSW5kaWNhdGl2ZSBST0knKSksCiAgICBjb25maWRlbmNlLCBoZWFkbGluZXMsIGV4Y2VlZHMsIGFkbWluT25seSwga3BpUm93LCBpbXBsYXVzaWJsZSwgYW5udWFsTm90ZSwKICAgIExlYWRDYXB0dXJlKCgpID0+IHIsICgpID0+ICh7IC4uLmxlYWRDb250ZXh0LCBkaXNwbGFjZW1lbnQ6IGRpc3AsIHN0YW5jZTogc3RhbmNlKGRpc3ApLmtleSB9KSksIHdvcmtlZE91dCwgY2FwYWNpdHksIGhvbmVzdCwgbWV0aG9kb2xvZ3ksIGFjdGlvbnMpOwoKICAvKiBSZWNvbXB1dGUgYW5kIHBhdGNoLCB3aXRob3V0IHJlYnVpbGRpbmcgYW55dGhpbmcuICovCiAgY29uc3QgYXBwbHkgPSB2ID0+IHsKICAgIGRpc3AgPSB2OyB0b3VjaGVkID0gdHJ1ZTsKICAgIHIgPSByZWNhbGModik7CiAgICBwY3RPdXQudGV4dENvbnRlbnQgPSBgJHtkaXNwfSVgOwogICAgc2xpZGVyLnZhbHVlID0gZGlzcDsKICAgIHNsaWRlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWV0ZXh0JywgYCR7ZGlzcH0lICgke3N0YW5jZShkaXNwKS5rZXl9KWApOwogICAgcHJlc2V0cy5mb3JFYWNoKChbLCBwdl0sIGkpID0+IHNldFN0eWxlKHBpbGxzW2ldLCBwaWxsU3R5bGUoZGlzcCA9PT0gcHYpKSk7CiAgICBzZXRTdGFuY2VUaXAoc3RhbmNlKGRpc3ApKTsKICAgIHVwZGF0ZXJzLmZvckVhY2goZm4gPT4gZm4ocikpOwogICAgb25EaXNwbGFjZW1lbnQoZGlzcCk7CiAgfTsKICBwaWxscy5mb3JFYWNoKChwLCBpKSA9PiBwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYXBwbHkocHJlc2V0c1tpXVsxXSkpKTsKICBzbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBlID0+IGFwcGx5KE51bWJlcihlLnRhcmdldC52YWx1ZSkpKTsKCiAgc2V0U3RhbmNlVGlwKHN0YW5jZShkaXNwKSk7CiAgdXBkYXRlcnMuZm9yRWFjaChmbiA9PiBmbihyKSk7CiAgcmV0dXJuIHBhZ2U7Cn0KCi8qIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB2YW5pbGxhL2FwcC5qcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIFJMRGF0aXggU21hcnQgTWF0Y2g6IFdvcmtmb3JjZSBST0kgY2FsY3VsYXRvciwgcGxhaW4gSlMuCgogICBObyBmcmFtZXdvcmssIG5vIGJ1aWxkIHN0ZXAsIG5vIEpTWC4gSWRlbnRpY2FsIG1ldGhvZG9sb2d5LCBlbmdpbmUsIHN0ZXAKICAgZmxvdyBhbmQgd29yZGluZyB0byB0aGUgUmVhY3QgYnVpbGQ6IHRoZXkgc2hhcmUgc3JjL2NhbGMvZW5naW5lLmpzLAogICBzcmMvdGhlbWUuanMsIHNyYy9kYXRhTGF5ZXIuanMgYW5kIHNyYy9sZWFkL2NvcmUuanMgdmVyYmF0aW0sIHNvIHRoZQogICBmaWd1cmVzLCB0aGUgUERGIGFuZCB0aGUgSHViU3BvdCBzdWJtaXNzaW9uIGNhbm5vdCBkaWZmZXIgYmV0d2VlbiB0aGVtLgoKICAgU3RhdGUgaXMgYSBwbGFpbiBvYmplY3QuIE5hdmlnYXRpbmcgcmVidWlsZHMgdGhlIGN1cnJlbnQgc2NyZWVuOyB3aXRoaW4KICAgdGhlIHJlc3VsdHMgc2NyZWVuIHRoZSBmaWd1cmVzIGFyZSBwYXRjaGVkIGluIHBsYWNlLiBUaGF0IGlzIHRoZSB3aG9sZQogICBhcmNoaXRlY3R1cmUuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLy8gVHJ1ZSB3aGVuIHJ1bm5pbmcgaW5zaWRlIGFuIGlmcmFtZSAoY3Jvc3Mtb3JpZ2luIHBhcmVudHMgdGhyb3cgb24gYWNjZXNzKS4KY29uc3QgRU1CRURERUQgPSAoKCkgPT4geyB0cnkgeyByZXR1cm4gd2luZG93LnNlbGYgIT09IHdpbmRvdy50b3A7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHRydWU7IH0gfSkoKTsKCmZ1bmN0aW9uIHBvc3RUb0hvc3QobXNnKSB7CiAgaWYgKCFFTUJFRERFRCkgcmV0dXJuOwogIHRyeSB7IHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobXNnLCAnKicpOyB9IGNhdGNoIChlKSB7IC8qIGhvc3QgZ29uZTsgaWdub3JlICovIH0KfQoKLy8gVGhlIHdlYiB2ZXJzaW9uIGxhbmRzIG9uIHRoZSBNb2RlcmF0ZSBzdGFuY2UgKDI2JSkgZm9yIGEgc3Ryb25nZXIgZmlyc3QKLy8gaW1wcmVzc2lvbiwgYW5kIHNlZWRzIHRoZSBiYW5rIHBvb2wgYXQgYSBtaWQtc2l6ZSB0cnVzdC4gVGhlIGVuZ2luZSdzIG93bgovLyBERUZBVUxUUyBzdGF5IHRoZSBjb25zZXJ2YXRpdmUgYmFzZWxpbmUgdGhlIGdvbGRlbiB0ZXN0cyBhcmUgcGlubmVkIHRvOwovLyB0aGVzZSBvbmx5IHNldCB0aGUgVUkncyBzdGFydGluZyBhbmQgcmVzZXQgdmFsdWVzLgpjb25zdCBTVEFSVF9ESVNQTEFDRU1FTlQgPSAyNjsKY29uc3QgU1RBUlRfQkFOS1BPT0wgPSAyMDAwOwoKY29uc3QgaW5pdGlhbFN0YXRlID0gKCkgPT4gKHsKICBiYW5rUG9vbDogU1RBUlRfQkFOS1BPT0wsCiAgYWdlbmN5RmlsbFJhdGU6IERFRkFVTFRTLmFnZW5jeUZpbGxSYXRlLAogIG51bU1hbmFnZXJzOiBERUZBVUxUUy5udW1NYW5hZ2VycywKICBkaXNwbGFjZW1lbnQ6IFNUQVJUX0RJU1BMQUNFTUVOVCwKICBpbmNsdWRlQWRtaW46IG51bGwsICAgLy8gcmVxdWlyZWQgWWVzL05vIGJlZm9yZSBsZWF2aW5nIHN0ZXAgMzsgbnVsbCA9IHVuZGVjaWRlZAogIGFnZW5jeVNwZW5kOiBudWxsLCAgICAvLyBvcHRpb25hbCBhY3R1YWwgc3BlbmQ7IG51bGwgPSB1c2UgdGhlIHBlci13b3JrZXIgZXN0aW1hdGUKICBzdGFuY2VUb3VjaGVkOiBmYWxzZSwgLy8gbm8gY29uZmlkZW5jZSBwcmVzZXQgaXMgaGlnaGxpZ2h0ZWQgdW50aWwgb25lIGlzIHBpY2tlZAp9KTsKCi8qIFN0YXRpYyBzdGFydCBzY3JlZW4uIFRoZSB3aGl0ZSB3b3JkbWFyayBhc3NldCBpcyByZW5kZXJlZCB0aHJvdWdoIGEgQ1NTCiAgIG1hc2sgc28gaXQgdGFrZXMgdGhlIGJyYW5kIG5hdnkgb24gdGhlIGxpZ2h0IGJhY2tncm91bmQuICovCmZ1bmN0aW9uIFN0YXJ0U2NyZWVuKG9uU3RhcnQpIHsKICByZXR1cm4gaCgnZGl2JywgeyBzdHlsZTogeyBtYXhXaWR0aDogNzYwLCBtYXJnaW46ICcwIGF1dG8nLCBwYWRkaW5nOiBgY2xhbXAoNDhweCwgOXZoLCAxMTBweCkgJHtHVVRURVJ9IGNsYW1wKDM2cHgsIDZ2aCwgNzBweClgLCB0ZXh0QWxpZ246ICdjZW50ZXInLCBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9IH0sCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnRpbnksIGZvbnRXZWlnaHQ6IDcwMCwgbGV0dGVyU3BhY2luZzogNiwgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZScsIGNvbG9yOiBDLmFjY2VudE1pZCwgbWFyZ2luQm90dG9tOiAyOCB9IH0sICdSTERhdGl4IHwgQmFua1N0YWZmKycpLAogICAgaCgnaDEnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiAnY2xhbXAoMS45cmVtLCA1LjJ2dywgM3JlbSknLCBmb250V2VpZ2h0OiA4MDAsIGxpbmVIZWlnaHQ6IDEuMTUsIGNvbG9yOiBDLnRleHQsIG1hcmdpbjogJzAgMCAyMHB4JywgbGV0dGVyU3BhY2luZzogJy0wLjVweCcgfSB9LAogICAgICAnTWVhc3VyZSB5b3VyIFJPSSBmcm9tJywgaCgnYnInKSwgJ1NtYXJ0IE1hdGNoIEFJJyksCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IHdpZHRoOiAxMjAsIGhlaWdodDogNSwgYm9yZGVyUmFkaXVzOiAzLCBtYXJnaW46ICcwIGF1dG8gMjZweCcsIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7Qy5hY2NlbnRNaWR9LCAke0Muc2VhZm9hbX0pYCB9IH0pLAogICAgaCgncCcsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgY29sb3I6IEMudGV4dE1pZCwgbGluZUhlaWdodDogMS42NSwgbWFyZ2luOiAnMCBhdXRvIDEycHgnLCBtYXhXaWR0aDogNjQwIH0gfSwKICAgICAgJ1NtYXJ0IE1hdGNoLCBhIG5ldyBCYW5rU3RhZmYrIGZlYXR1cmUsIGF1dG9tYXRpY2FsbHkgY29ubmVjdHMgeW91ciBiYW5rIHdvcmtmb3JjZSB3aXRoIHZhY2FudCBzaGlmdHMgdGhyb3VnaCBMb29wLCB0byBpbXByb3ZlIGZpbGwgcmF0ZXMsIGxvd2VyIGFnZW5jeSB1c2FnZSwgYW5kIHJlZHVjZSB0aGUgYWRtaW5pc3RyYXRpdmUgYnVyZGVuLicpLAogICAgaCgncCcsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgY29sb3I6IEMudGV4dCwgZm9udFdlaWdodDogNjAwLCBtYXJnaW46ICcwIGF1dG8gMzZweCcsIG1heFdpZHRoOiA2NDAgfSB9LAogICAgICAnU2VlIGhvdyBtdWNoIHlvdXIgb3JnYW5pc2F0aW9uIGNvdWxkIHNhdmUgd2l0aCBTbWFydCBNYXRjaC4nKSwKICAgIGgoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicsIHN0eWxlOiB7IHBhZGRpbmc6ICcxNnB4IDU2cHgnLCBib3JkZXJSYWRpdXM6IDk5OSwgYm9yZGVyOiAnbm9uZScsIGJhY2tncm91bmQ6IEMuYWNjZW50LCBjb2xvcjogJyNmZmYnLCBmb250U2l6ZTogRi5oMywgZm9udFdlaWdodDogODAwLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseTogJ2luaGVyaXQnLCBsZXR0ZXJTcGFjaW5nOiAxIH0sIG9uQ2xpY2s6IG9uU3RhcnQgfSwgJ0dldCBzdGFydGVkIOKGkicpLAogICAgaCgnZGl2JywgeyByb2xlOiAnaW1nJywgJ2FyaWEtbGFiZWwnOiAnUkxEYXRpeCcsIHN0eWxlOiB7IHdpZHRoOiAxMjAsIGhlaWdodDogMjQsIG1hcmdpblRvcDogJ2NsYW1wKDM2cHgsIDd2aCwgNzBweCknLCBiYWNrZ3JvdW5kOiBDLm5hdnksIG9wYWNpdHk6IDAuNzUsIFdlYmtpdE1hc2tJbWFnZTogYHVybCgke3JsZGF0aXhMb2dvfSlgLCBtYXNrSW1hZ2U6IGB1cmwoJHtybGRhdGl4TG9nb30pYCwgV2Via2l0TWFza1JlcGVhdDogJ25vLXJlcGVhdCcsIG1hc2tSZXBlYXQ6ICduby1yZXBlYXQnLCBXZWJraXRNYXNrU2l6ZTogJ2NvbnRhaW4nLCBtYXNrU2l6ZTogJ2NvbnRhaW4nLCBXZWJraXRNYXNrUG9zaXRpb246ICdjZW50ZXInLCBtYXNrUG9zaXRpb246ICdjZW50ZXInIH0gfSksCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IGZvbnRTaXplOiBGLnRpbnksIGNvbG9yOiBDLnRleHRNdXRlZCwgbWFyZ2luVG9wOiAxMCB9IH0sICdTbWFydCBNYXRjaCDCtyBCYW5rLVN0YWZmIFV0aWxpc2F0aW9uIFJPSScpKTsKfQoKZnVuY3Rpb24gQ2FsaWJyYXRpbmdTY3JlZW4ob25Eb25lKSB7CiAgY29uc3QgbGFiZWxzID0gWydSZWFkaW5nIHlvdXIgYmFuayBwb29sJywgJ01vZGVsbGluZyBhZ2VuY3kgZGlzcGxhY2VtZW50JywgJ1ZhbHVpbmcgcmVsZWFzZWQgYWRtaW4gdGltZScsICdCdWlsZGluZyB5b3VyIFJPSSddOwogIGNvbnN0IGJhciA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgaGVpZ2h0OiAnMTAwJScsIHdpZHRoOiAnMCUnLCBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke0MuYWNjZW50fSwgJHtDLmFjY2VudE1pZH0pYCwgYm9yZGVyUmFkaXVzOiAzLCB0cmFuc2l0aW9uOiAnd2lkdGggLjVzIGVhc2Utb3V0JyB9IH0pOwogIGNvbnN0IHN1YiA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgY29sb3I6IEMudGV4dE11dGVkLCBtYXJnaW5Cb3R0b206IDM2LCB0ZXh0QWxpZ246ICdjZW50ZXInIH0gfSwgJ0FuYWx5c2luZyBpbnB1dHMuLi4nKTsKICBjb25zdCByb3dzID0gbGFiZWxzLm1hcChsYWJlbCA9PiB7CiAgICBjb25zdCBkb3QgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IHdpZHRoOiAyOCwgaGVpZ2h0OiAyOCwgYm9yZGVyUmFkaXVzOiAnNTAlJywgZmxleFNocmluazogMCwgYmFja2dyb3VuZDogQy5ib3JkZXIsIGJvcmRlcjogJzJweCBzb2xpZCB0cmFuc3BhcmVudCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgdHJhbnNpdGlvbjogJ2FsbCAuM3MnIH0gfSk7CiAgICBjb25zdCB0ZXh0ID0gaCgnc3BhbicsIHsgc3R5bGU6IHsgZm9udFNpemU6IEYuYm9keSwgZm9udFdlaWdodDogNDAwLCBjb2xvcjogQy50ZXh0TXV0ZWQsIHRyYW5zaXRpb246ICdhbGwgLjNzJyB9IH0sIGxhYmVsKTsKICAgIGNvbnN0IHJvdyA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAxNCwgb3BhY2l0eTogMC4yLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKC04cHgpJywgdHJhbnNpdGlvbjogJ2FsbCAuNHMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSknIH0gfSwgZG90LCB0ZXh0KTsKICAgIHJldHVybiB7IHJvdywgZG90LCB0ZXh0IH07CiAgfSk7CgogIGNvbnN0IHBhaW50ID0gc3RlcCA9PiB7CiAgICByb3dzLmZvckVhY2goKHsgcm93LCBkb3QsIHRleHQgfSwgaSkgPT4gewogICAgICBjb25zdCBkb25lID0gc3RlcCA+IGksIGFjdGl2ZSA9IHN0ZXAgPT09IGk7CiAgICAgIHJvdy5zdHlsZS5vcGFjaXR5ID0gZG9uZSA\/ICcxJyA6IGFjdGl2ZSA\/ICcwLjknIDogJzAuMic7CiAgICAgIHJvdy5zdHlsZS50cmFuc2Zvcm0gPSAoZG9uZSB8fCBhY3RpdmUpID8gJ3RyYW5zbGF0ZVgoMCknIDogJ3RyYW5zbGF0ZVgoLThweCknOwogICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZCA9IGRvbmUgPyBDLmFjY2VudCA6IGFjdGl2ZSA\/IEMuYWNjZW50ICsgJzMwJyA6IEMuYm9yZGVyOwogICAgICBkb3Quc3R5bGUuYm9yZGVyID0gYWN0aXZlID8gJzJweCBzb2xpZCAnICsgQy5hY2NlbnQgOiAnMnB4IHNvbGlkIHRyYW5zcGFyZW50JzsKICAgICAgZmlsbChkb3QsIGRvbmUgPyBoKCdzcGFuJywgeyBzdHlsZTogeyBjb2xvcjogJyNmZmYnLCBmb250U2l6ZTogMTUsIGZvbnRXZWlnaHQ6IDgwMCB9IH0sICfinJMnKQogICAgICAgIDogYWN0aXZlID8gaCgnZGl2JywgeyBzdHlsZTogeyB3aWR0aDogOCwgaGVpZ2h0OiA4LCBib3JkZXJSYWRpdXM6IDQsIGJhY2tncm91bmQ6IEMuYWNjZW50IH0gfSkgOiAnJyk7CiAgICAgIHRleHQuc3R5bGUuZm9udFdlaWdodCA9IGFjdGl2ZSA\/ICc3MDAnIDogJzQwMCc7CiAgICAgIHRleHQuc3R5bGUuY29sb3IgPSBkb25lID8gQy5hY2NlbnQgOiBhY3RpdmUgPyBDLnRleHQgOiBDLnRleHRNdXRlZDsKICAgIH0pOwogICAgc3ViLnRleHRDb250ZW50ID0gJ0FuYWx5c2luZyAnICsgKHN0ZXAgPCAyID8gJ2lucHV0cycgOiAnd29ya2ZvcmNlIGltcGFjdCcpICsgJy4uLic7CiAgfTsKICBwYWludCgwKTsKCiAgY29uc3QgdGltZXJzID0gWwogICAgc2V0VGltZW91dCgoKSA9PiB7IHBhaW50KDEpOyBiYXIuc3R5bGUud2lkdGggPSAnMjUlJzsgfSwgNTAwKSwKICAgIHNldFRpbWVvdXQoKCkgPT4geyBwYWludCgyKTsgYmFyLnN0eWxlLndpZHRoID0gJzUwJSc7IH0sIDExMDApLAogICAgc2V0VGltZW91dCgoKSA9PiB7IHBhaW50KDMpOyBiYXIuc3R5bGUud2lkdGggPSAnNzUlJzsgfSwgMTcwMCksCiAgICBzZXRUaW1lb3V0KCgpID0+IHsgYmFyLnN0eWxlLndpZHRoID0gJzEwMCUnOyB9LCAyMjAwKSwKICAgIHNldFRpbWVvdXQob25Eb25lLCAyNTAwKSwKICBdOwoKICBjb25zdCBlbCA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsIHBhZGRpbmc6ICcxMnZoIDIwcHggODBweCcsIG1pbkhlaWdodDogJzcwdmgnIH0gfSwKICAgIGgoJ3N0eWxlJywgbnVsbCwgJ0BrZXlmcmFtZXMgY2FsU3BpbiB7IHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9IEBrZXlmcmFtZXMgY2FsUHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTouNTsgdHJhbnNmb3JtOnNjYWxlKDEpOyB9IDUwJSB7IG9wYWNpdHk6MTsgdHJhbnNmb3JtOnNjYWxlKDEuMDIpOyB9IH0nKSwKICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcG9zaXRpb246ICdyZWxhdGl2ZScsIHdpZHRoOiA4NCwgaGVpZ2h0OiA4NCwgbWFyZ2luQm90dG9tOiAzNiB9IH0sCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGluc2V0OiAwLCBib3JkZXI6ICc0cHggc29saWQgJyArIEMuYm9yZGVyLCBib3JkZXJSYWRpdXM6ICc1MCUnIH0gfSksCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGluc2V0OiAwLCBib3JkZXI6ICc0cHggc29saWQgdHJhbnNwYXJlbnQnLCBib3JkZXJUb3BDb2xvcjogQy5hY2NlbnQsIGJvcmRlclJpZ2h0Q29sb3I6IEMuYWNjZW50LCBib3JkZXJSYWRpdXM6ICc1MCUnLCBhbmltYXRpb246ICdjYWxTcGluIC44cyBsaW5lYXIgaW5maW5pdGUnIH0gfSksCiAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGluc2V0OiAxNCwgYm9yZGVyOiAnM3B4IHNvbGlkIHRyYW5zcGFyZW50JywgYm9yZGVyVG9wQ29sb3I6IEMuYWNjZW50TWlkLCBib3JkZXJSYWRpdXM6ICc1MCUnLCBhbmltYXRpb246ICdjYWxTcGluIDEuNHMgbGluZWFyIGluZmluaXRlIHJldmVyc2UnIH0gfSkpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBmb250U2l6ZTogRi5oMSwgZm9udFdlaWdodDogODAwLCBjb2xvcjogQy5hY2NlbnQsIG1hcmdpbkJvdHRvbTogMTAsIGFuaW1hdGlvbjogJ2NhbFB1bHNlIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlJywgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0sICdDYWxpYnJhdGluZyB5b3VyIG1vZGVsJyksCiAgICBzdWIsCiAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IHdpZHRoOiA0MjAsIG1heFdpZHRoOiAnODAlJywgaGVpZ2h0OiA2LCBiYWNrZ3JvdW5kOiBDLmJvcmRlciwgYm9yZGVyUmFkaXVzOiAzLCBtYXJnaW5Cb3R0b206IDMyLCBvdmVyZmxvdzogJ2hpZGRlbicgfSB9LCBiYXIpLAogICAgaCgnZGl2JywgeyBzdHlsZTogeyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDE0LCB3aWR0aDogNDIwLCBtYXhXaWR0aDogJzgwJScgfSB9LCAuLi5yb3dzLm1hcCh4ID0+IHgucm93KSkpOwogIGVsLl9jYW5jZWwgPSAoKSA9PiB0aW1lcnMuZm9yRWFjaChjbGVhclRpbWVvdXQpOwogIHJldHVybiBlbDsKfQoKZnVuY3Rpb24gbW91bnQocm9vdCkgewogIHJvb3QudGV4dENvbnRlbnQgPSAnJzsgICAgICAgIC8vIGNsZWFycyB0aGUgbm8tSlMgZmFsbGJhY2sgdGhhdCBsaXZlcyBpbiAjcm9vdAogIGxldCBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpOwogIGxldCBzY3JlZW4gPSAnc3RhcnQnOyAgICAgICAgICAvLyBzdGFydCB8IHN0ZXBzIHwgY2FsaWJyYXRpbmcgfCBhZG1pbgogIGxldCBzdGVwID0gMDsKICBsZXQgY3VycmVudCA9IG51bGw7ICAgICAgICAgICAgLy8gdGhlIG1vdW50ZWQgc2NyZWVuIG5vZGUsIGZvciB0ZWFyZG93bgogIGxldCBmaXJzdCA9IHRydWU7ICAgICAgICAgICAgICAvLyBkbyBub3Qgc3RlYWwgZm9jdXMgb24gdGhlIHZlcnkgZmlyc3QgcGFpbnQKCiAgY29uc3Qgc3RlcHMgPSBLSU9TS19TVEVQUzsKICBjb25zdCBSRVNVTFRTX1NURVAgPSBzdGVwcy5sZW5ndGggLSAxOwoKICBjb25zdCBjb21wdXRlID0gKGQgPSBzdGF0ZS5kaXNwbGFjZW1lbnQpID0+IGNhbGMoewogICAgYmFua1Bvb2w6IHN0YXRlLmJhbmtQb29sLCBhZ2VuY3lGaWxsUmF0ZTogc3RhdGUuYWdlbmN5RmlsbFJhdGUsIG51bU1hbmFnZXJzOiBzdGF0ZS5udW1NYW5hZ2VycywKICAgIGRpc3BsYWNlbWVudDogZCwgaW5jbHVkZUFkbWluOiBzdGF0ZS5pbmNsdWRlQWRtaW4sIGFnZW5jeVNwZW5kOiBzdGF0ZS5hZ2VuY3lTcGVuZCwKICAgIHBsYXRmb3JtQ29zdDogcGxhdGZvcm1Db3N0Rm9yKHN0YXRlLmJhbmtQb29sKSwKICB9KTsKCiAgLyogRGF0YSBsYXllcjogcmVwdWJsaXNoIG9uIGV2ZXJ5IGNoYW5nZSBzbyBhIGhvc3QgcGFnZSBjYW4gcmVhZAogICAgIHdpbmRvdy5zbWFydE1hdGNoUk9JRGF0YSAoc2VlIERBVEEtTEFZRVItUkVGRVJFTkNFLm1kKS4gTmV2ZXIgYmxvY2tzLiAqLwogIGNvbnN0IHB1Ymxpc2ggPSAoKSA9PiB7CiAgICBwdWJsaXNoRGF0YShidWlsZERhdGEoY29tcHV0ZSgpLCB7CiAgICAgIGJhbmtQb29sOiBzdGF0ZS5iYW5rUG9vbCwgYWdlbmN5RmlsbFJhdGU6IHN0YXRlLmFnZW5jeUZpbGxSYXRlLCBudW1NYW5hZ2Vyczogc3RhdGUubnVtTWFuYWdlcnMsCiAgICAgIGRpc3BsYWNlbWVudDogc3RhdGUuZGlzcGxhY2VtZW50LCBpbmNsdWRlQWRtaW46IHN0YXRlLmluY2x1ZGVBZG1pbiwgYWdlbmN5U3BlbmQ6IHN0YXRlLmFnZW5jeVNwZW5kLAogICAgICBjYWxjQXQ6IGQgPT4gY29tcHV0ZShkKSwKICAgIH0pKTsKICB9OwoKICBjb25zdCBzZXQgPSAoa2V5LCB2YWx1ZSkgPT4geyBzdGF0ZVtrZXldID0gdmFsdWU7IHB1Ymxpc2goKTsgc3luY05hdigpOyB9OwoKICBjb25zdCBzaGVsbCA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgZm9udEZhbWlseTogIidETSBTYW5zIFZhcmlhYmxlJywgJ0RNIFNhbnMnLCBzYW5zLXNlcmlmIiwgYmFja2dyb3VuZDogQy5iZywgd2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiBFTUJFRERFRCA\/IG51bGwgOiAnMTAwdmgnLCBjb2xvcjogQy50ZXh0LCBsaW5lSGVpZ2h0OiAxLjU1LCBwb3NpdGlvbjogJ3JlbGF0aXZlJywgekluZGV4OiAwIH0gfSk7CgogIC8qIEEgc2NyZWVuIGNoYW5nZSByZXBsYWNlcyB0aGUgd2hvbGUgdmlldywgc28gd2l0aG91dCB0aGlzIGEgc2NyZWVuLXJlYWRlcgogICAgIG9yIGtleWJvYXJkIHVzZXIgaXMgbGVmdCB3aGVyZSB0aGV5IHdlcmUsIG9uIGEgYnV0dG9uIHRoYXQgbm8gbG9uZ2VyCiAgICAgZXhpc3RzLiB0YWJpbmRleD0iLTEiIG1ha2VzIHRoZSByZWdpb24gZm9jdXNhYmxlIHByb2dyYW1tYXRpY2FsbHkgb25seSwKICAgICBzbyBpdCBuZXZlciBqb2lucyB0aGUgdGFiIG9yZGVyLiAqLwogIGNvbnN0IGJvZHkgPSBoKCdkaXYnLCB7IHRhYmluZGV4OiAnLTEnLCBzdHlsZTogeyBvdXRsaW5lOiAnbm9uZScgfSB9KTsKCiAgLyogUmVzdWx0cyBhcmUgY29tcHV0ZWQgYWZ0ZXIgYSBwYXVzZSBhbmQgbGFuZCBvZmYtc2NyZWVuIGZvciBhbnlvbmUgbm90CiAgICAgd2F0Y2hpbmcgdGhlIHBhZ2UuIEEgcG9saXRlIGxpdmUgcmVnaW9uIGFubm91bmNlcyB0aGUgaGVhZGxpbmUgb25jZS4gKi8KICBjb25zdCBhbm5vdW5jZXIgPSBoKCdkaXYnLCB7CiAgICByb2xlOiAnc3RhdHVzJywgJ2FyaWEtbGl2ZSc6ICdwb2xpdGUnLCAnYXJpYS1hdG9taWMnOiAndHJ1ZScsCiAgICBzdHlsZTogeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgd2lkdGg6IDEsIGhlaWdodDogMSwgbWFyZ2luOiAtMSwgcGFkZGluZzogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCBjbGlwOiAncmVjdCgwIDAgMCAwKScsIHdoaXRlU3BhY2U6ICdub3dyYXAnLCBib3JkZXI6IDAgfSwKICB9KTsKICBzaGVsbC5hcHBlbmRDaGlsZChhbm5vdW5jZXIpOwogIHNoZWxsLmFwcGVuZENoaWxkKGJvZHkpOwogIHJvb3QuYXBwZW5kQ2hpbGQoc2hlbGwpOwoKICBsZXQgbmF2RWwgPSBudWxsOwogIGNvbnN0IHN5bmNOYXYgPSAoKSA9PiB7CiAgICBpZiAoc2NyZWVuICE9PSAnc3RlcHMnIHx8ICFuYXZFbCkgcmV0dXJuOwogICAgLy8gT25seSBzdGVwIDMncyBOZXh0IGlzIGNvbmRpdGlvbmFsLCBvbiB0aGUgcmVxdWlyZWQgYWRtaW4tdGltZSBkZWNpc2lvbi4KICAgIGNvbnN0IGJ0biA9IG5hdkVsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbjpsYXN0LW9mLXR5cGUnKTsKICAgIGlmIChzdGVwID09PSAyICYmIGJ0bikgewogICAgICBjb25zdCBibG9ja2VkID0gc3RhdGUuaW5jbHVkZUFkbWluID09IG51bGw7CiAgICAgIGJ0bi5kaXNhYmxlZCA9IGJsb2NrZWQ7CiAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gYmxvY2tlZCA\/IEMuYm9yZGVyIDogQy5hY2NlbnQ7CiAgICAgIGJ0bi5zdHlsZS5jb2xvciA9IGJsb2NrZWQgPyBDLnRleHRNdXRlZCA6ICcjZmZmJzsKICAgICAgYnRuLnN0eWxlLmN1cnNvciA9IGJsb2NrZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInOwogICAgfQogIH07CgogIGNvbnN0IGdvID0gbmV4dCA9PiB7IHN0ZXAgPSBuZXh0OyByZW5kZXIoKTsgfTsKCiAgY29uc3Qgc3RhcnRPdmVyID0gKCkgPT4geyBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpOyBzY3JlZW4gPSAnc3RhcnQnOyBzdGVwID0gMDsgcmVuZGVyKCk7IH07CgogIGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuX2NhbmNlbCkgY3VycmVudC5fY2FuY2VsKCk7CiAgICBsZXQgdmlldzsKCiAgICBpZiAoc2NyZWVuID09PSAnYWRtaW4nKSB7CiAgICAgIHZpZXcgPSBBZG1pbkxlYWRzKCgpID0+IHsgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJzsgfSk7CiAgICB9IGVsc2UgaWYgKHNjcmVlbiA9PT0gJ3N0YXJ0JykgewogICAgICB2aWV3ID0gU3RhcnRTY3JlZW4oKCkgPT4geyBzY3JlZW4gPSAnc3RlcHMnOyBzdGVwID0gMDsgcmVuZGVyKCk7IH0pOwogICAgfSBlbHNlIGlmIChzY3JlZW4gPT09ICdjYWxpYnJhdGluZycpIHsKICAgICAgdmlldyA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgcG9zaXRpb246ICdyZWxhdGl2ZScsIHpJbmRleDogMSB9IH0sCiAgICAgICAgQ2FsaWJyYXRpbmdTY3JlZW4oKCkgPT4geyBzY3JlZW4gPSAnc3RlcHMnOyBzdGVwID0gUkVTVUxUU19TVEVQOyByZW5kZXIoKTsgfSkpOwogICAgICBjdXJyZW50ID0gdmlldy5maXJzdENoaWxkOwogICAgfSBlbHNlIGlmIChzdGVwID09PSBSRVNVTFRTX1NURVApIHsKICAgICAgdmlldyA9IGgoJ2RpdicsIHsgc3R5bGU6IHsgbWF4V2lkdGg6IE1BWFcsIG1hcmdpbjogJzAgYXV0bycsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCB6SW5kZXg6IDEgfSB9LAogICAgICAgIGgoJ2RpdicsIHsgc3R5bGU6IHsgcGFkZGluZzogYGNsYW1wKDE4cHgsIDN2dywgMzZweCkgJHtHVVRURVJ9IDBgIH0gfSwgU3RlcEluZGljYXRvcihzdGVwcywgc3RlcCwgZ28pKSwKICAgICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IHBhZGRpbmc6IGAwICR7R1VUVEVSfSA4cHhgIH0gfSwgUmVzdWx0c1BhZ2UoewogICAgICAgICAgcjA6IGNvbXB1dGUoKSwgZGlzcGxhY2VtZW50OiBzdGF0ZS5kaXNwbGFjZW1lbnQsIGNob3Nlbjogc3RhdGUuc3RhbmNlVG91Y2hlZCwKICAgICAgICAgIHJlY2FsYzogZCA9PiBjb21wdXRlKGQpLAogICAgICAgICAgb25EaXNwbGFjZW1lbnQ6IGQgPT4geyBzdGF0ZS5kaXNwbGFjZW1lbnQgPSBkOyBzdGF0ZS5zdGFuY2VUb3VjaGVkID0gdHJ1ZTsgcHVibGlzaCgpOyB9LAogICAgICAgICAgb25BZGp1c3Q6ICgpID0+IGdvKDApLAogICAgICAgICAgb25TdGFydE92ZXI6IHN0YXJ0T3ZlciwKICAgICAgICAgIGxlYWRDb250ZXh0OiB7IGJhbmtQb29sOiBzdGF0ZS5iYW5rUG9vbCwgYWdlbmN5RmlsbFJhdGU6IHN0YXRlLmFnZW5jeUZpbGxSYXRlLCBudW1NYW5hZ2Vyczogc3RhdGUubnVtTWFuYWdlcnMsIGRpc3BsYWNlbWVudDogc3RhdGUuZGlzcGxhY2VtZW50LCBpbmNsdWRlQWRtaW46IHN0YXRlLmluY2x1ZGVBZG1pbiwgYWdlbmN5U3BlbmQ6IHN0YXRlLmFnZW5jeVNwZW5kLCBzdGFuY2U6IHN0YW5jZShzdGF0ZS5kaXNwbGFjZW1lbnQpLmtleSB9LAogICAgICAgIH0pKSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBwYWdlID0gW0JhbmtTdGVwLCBBZ2VuY3lTdGVwLCBUZWFtU3RlcCwgU3RhbmNlU3RlcF1bc3RlcF0oc3RhdGUsIHNldCk7CiAgICAgIHBhZ2Uuc3R5bGUuYW5pbWF0aW9uID0gJ2tTbGlkZVVwIC40cyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSc7CiAgICAgIG5hdkVsID0gTmF2QnV0dG9ucyh7CiAgICAgICAgc3RlcCwgdG90YWxTdGVwczogc3RlcHMubGVuZ3RoLAogICAgICAgIG5leHREaXNhYmxlZDogc3RlcCA9PT0gMiAmJiBzdGF0ZS5pbmNsdWRlQWRtaW4gPT0gbnVsbCwKICAgICAgICBvbkJhY2s6ICgpID0+IGdvKHN0ZXAgLSAxKSwKICAgICAgICBvbk5leHQ6ICgpID0+IGdvKHN0ZXAgKyAxKSwKICAgICAgICBvbkNhbGN1bGF0ZTogKCkgPT4geyBzY3JlZW4gPSAnY2FsaWJyYXRpbmcnOyByZW5kZXIoKTsgfSwKICAgICAgICBvbkhvbWU6IHN0YXJ0T3ZlciwKICAgICAgfSk7CiAgICAgIHZpZXcgPSBoKCdkaXYnLCB7IHN0eWxlOiB7IG1heFdpZHRoOiBNQVhXLCBtYXJnaW46ICcwIGF1dG8nLCBwb3NpdGlvbjogJ3JlbGF0aXZlJywgekluZGV4OiAxIH0gfSwKICAgICAgICBoKCdkaXYnLCB7IHN0eWxlOiB7IHBhZGRpbmc6IGBjbGFtcCgxOHB4LCAzdncsIDM2cHgpICR7R1VUVEVSfSAwYCB9IH0sIFN0ZXBJbmRpY2F0b3Ioc3RlcHMsIHN0ZXAsIGdvKSksCiAgICAgICAgaCgnZGl2JywgeyBzdHlsZTogeyBwYWRkaW5nOiBgMCAke0dVVFRFUn0gOHB4YCB9IH0sIHBhZ2UpLAogICAgICAgIG5hdkVsKTsKICAgIH0KCiAgICBmaWxsKGJvZHksIHZpZXcpOwogICAgaWYgKHNjcmVlbiAhPT0gJ2NhbGlicmF0aW5nJykgY3VycmVudCA9IG51bGw7CgogICAgLy8gTW92ZSBmb2N1cyB0byB0aGUgbmV3IHNjcmVlbiwgYW5kIGFubm91bmNlIHRoZSByZXN1bHQgd2hlbiB0aGVyZSBpcyBvbmUuCiAgICBpZiAoIWZpcnN0KSBib2R5LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsKICAgIGZpcnN0ID0gZmFsc2U7CiAgICBpZiAoc2NyZWVuID09PSAnc3RlcHMnICYmIHN0ZXAgPT09IFJFU1VMVFNfU1RFUCkgewogICAgICBjb25zdCByZXMgPSBjb21wdXRlKCk7CiAgICAgIGFubm91bmNlci50ZXh0Q29udGVudCA9IHJlcy5uZXRTYXZpbmcgPiAwCiAgICAgICAgPyBgUmVzdWx0cyByZWFkeS4gUG90ZW50aWFsIGFubnVhbCBjYXNoIHNhdmluZyAke2ZtdEsocmVzLm5ldFNhdmluZyl9LCBhbmQgJHtmbXROdW0ocmVzLnRpbWVTYXZlZFdlZWspfSBob3VycyByZWxlYXNlZCBlYWNoIHdlZWsuYAogICAgICAgIDogYFJlc3VsdHMgcmVhZHkuIE5vIG5ldCBjYXNoIHNhdmluZyBhdCB0aGlzIHNjYWxlLiAke2ZtdE51bShyZXMudGltZVNhdmVkV2Vlayl9IGhvdXJzIHJlbGVhc2VkIGVhY2ggd2Vlay5gOwogICAgfSBlbHNlIHsKICAgICAgYW5ub3VuY2VyLnRleHRDb250ZW50ID0gJyc7CiAgICB9CgogICAgLy8gT24gc2NyZWVuIGNoYW5nZSBzY3JvbGwgYmFjayB0byB0aGUgdG9wOiBpbnNpZGUgdGhlIHBhZ2Ugd2hlbiBzdGFuZGFsb25lLAogICAgLy8gdmlhIHRoZSBob3N0IHdoZW4gZW1iZWRkZWQgKHRoZSBpZnJhbWUgaXMgZnVsbCBoZWlnaHQsIHNvIG9ubHkgdGhlIGhvc3QKICAgIC8vIHBhZ2UgY2FuIGFjdHVhbGx5IHNjcm9sbCkuCiAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7CiAgICBwb3N0VG9Ib3N0KHsgdHlwZTogJ3NtYXJ0bWF0Y2gtcm9pLXNjcm9sbC10b3AnIH0pOwogIH0KCiAgLy8gI2FkbWluLWxlYWRzIHJldmlld3MgbG9jYWxseSBzdG9yZWQgbGVhZC1mb3JtIHN1Ym1pc3Npb25zLiBIYXNoLWRyaXZlbiwgc28KICAvLyBpdCBuZWVkcyBubyBVSSBhZmZvcmRhbmNlLgogIGNvbnN0IG9uSGFzaCA9ICgpID0+IHsKICAgIGNvbnN0IGFkbWluID0gd2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICcjYWRtaW4tbGVhZHMnOwogICAgaWYgKGFkbWluICYmIHNjcmVlbiAhPT0gJ2FkbWluJykgeyBzY3JlZW4gPSAnYWRtaW4nOyByZW5kZXIoKTsgfQogICAgZWxzZSBpZiAoIWFkbWluICYmIHNjcmVlbiA9PT0gJ2FkbWluJykgeyBzY3JlZW4gPSAnc3RhcnQnOyByZW5kZXIoKTsgfQogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBvbkhhc2gpOwogIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gJyNhZG1pbi1sZWFkcycpIHNjcmVlbiA9ICdhZG1pbic7CgogIC8vIElmcmFtZSBlbWJlZDogcmVwb3J0IG91ciBjb250ZW50IGhlaWdodCB0byB0aGUgaG9zdCB3aGVuZXZlciBpdCBjaGFuZ2VzLAogIC8vIHNvIHRoZSBob3N0IGNhbiBzaXplIHRoZSBpZnJhbWUgd2l0aCBubyBpbm5lciBzY3JvbGxiYXIuIE1lYXN1cmVkIG9uIHRoZQogIC8vIG1vdW50ZWQgcm9vdCwgbm90IHRoZSBkb2N1bWVudDogc2Nyb2xsSGVpZ2h0IG9uIGRvY3VtZW50RWxlbWVudCBpcyBkZWZpbmVkCiAgLy8gYXMgYXQgbGVhc3QgdGhlIHZpZXdwb3J0IGhlaWdodCwgd2hpY2ggbWFrZXMgdGhlIGZyYW1lIHJhdGNoZXQgYW5kIG5ldmVyCiAgLy8gc2hyaW5rIGFnYWluLgogIGlmIChFTUJFRERFRCAmJiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7CiAgICBsZXQgcmFmID0gMDsKICAgIGNvbnN0IHBvc3QgPSAoKSA9PiB7CiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7CiAgICAgIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBwb3N0VG9Ib3N0KHsgdHlwZTogJ3NtYXJ0bWF0Y2gtcm9pLXJlc2l6ZScsIGhlaWdodDogTWF0aC5jZWlsKHNoZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgfSkpOwogICAgfTsKICAgIG5ldyBSZXNpemVPYnNlcnZlcihwb3N0KS5vYnNlcnZlKHNoZWxsKTsKICAgIHBvc3QoKTsKICB9CgogIHJlbmRlcigpOwogIHB1Ymxpc2goKTsKfQoKCiAgLyogVGhlIG9ubHkgZ2xvYmFsIHRoaXMgc2NyaXB0IGRlZmluZXMuICovCiAgd2luZG93LlNtYXJ0TWF0Y2hST0kgPSB7IG1vdW50OiBtb3VudCB9Owp9KSgpOwoKICA8L3NjcmlwdD4KICA8c2NyaXB0PgogICAgU21hcnRNYXRjaFJPSS5tb3VudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKTsKICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==\";\n  var frame = document.getElementById(\"smroi-frame\");\n  \/\/ Tell the calculator which page it is on, so HubSpot leads are attributed\n  \/\/ to this page. Sent on load and once more shortly after, in case the first\n  \/\/ arrives before the calculator's listener is ready.\n  var announce = function () {\n    try { frame.contentWindow.postMessage({ type: \"smartmatch-roi-host\", href: location.href }, \"*\"); } catch (e) {}\n  };\n  frame.addEventListener(\"load\", function () { announce(); setTimeout(announce, 1200); });\n  try {\n    frame.srcdoc = decodeURIComponent(escape(window.atob(DATA)));\n  } catch (e) {\n    frame.srcdoc = window.atob(DATA);\n  }\n  window.addEventListener(\"message\", function (ev) {\n    var d = ev.data;\n    if (d && d.type === \"smartmatch-roi-resize\" && d.height) {\n      frame.style.height = d.height + \"px\";\n    }\n    \/\/ Step changes: bring the top of the calculator back into view, since\n    \/\/ the iframe cannot scroll the page itself.\n    if (d && d.type === \"smartmatch-roi-scroll-top\") {\n      var top = frame.getBoundingClientRect().top;\n      if (top < 0) frame.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n  });\n})();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":40,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-full-width.php","meta":{"_acf_changed":true,"inline_featured_image":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-11985","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.2 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>smart match ROI Calculator | RLDatix<\/title>\n<meta name=\"description\" content=\"smart match ROI Calculator. Discover health &amp; care software solutions designed to support patient safety, compliance and operational efficiency.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"smart match ROI Calculator\" \/>\n<meta property=\"og:description\" content=\"smart match ROI Calculator. Discover health &amp; care software solutions designed to support patient safety, compliance and operational efficiency.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"UK &amp; Ireland\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-07T09:52:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.rldatix.com\/en-uki\/wp-content\/uploads\/sites\/6\/2025\/08\/OpenGraph-Image_UK-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@rldatixuki\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/smart-match-roi-calculator\\\/\",\"url\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/smart-match-roi-calculator\\\/\",\"name\":\"smart match ROI Calculator | RLDatix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#website\"},\"datePublished\":\"2026-08-06T12:35:43+00:00\",\"dateModified\":\"2026-10-07T09:52:25+00:00\",\"description\":\"smart match ROI Calculator. Discover health & care software solutions designed to support patient safety, compliance and operational efficiency.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/smart-match-roi-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/smart-match-roi-calculator\\\/\"]}],\"about\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#organization\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/smart-match-roi-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"RLDatix \u2013 UK &amp; Ireland\",\"item\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"smart match ROI Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#website\",\"url\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/\",\"name\":\"RLDatix \u2013 UK & Ireland\",\"description\":\"RLDatix, the real life decisions software solutions driving health in healthcare, helping organise, reduce harm, improve safety and strengthen patient and staff outcomes through systemwide decision making\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#organization\",\"name\":\"RLDatix \u2013 UK & Ireland\",\"url\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2024\\\/08\\\/logo-dark.svg\",\"contentUrl\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/wp-content\\\/uploads\\\/sites\\\/6\\\/2024\\\/08\\\/logo-dark.svg\",\"caption\":\"RLDatix \u2013 UK & Ireland\"},\"image\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/en-uki\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/rldatixuki\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/rldatix-uki\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@TheConnectionRLDatix\"],\"areaServed\":\"Worldwide\",\"parentOrganization\":{\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/#organization\"}},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.rldatix.com\\\/#organization\",\"name\":\"RLDatix\",\"url\":\"https:\\\/\\\/www.rldatix.com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"smart match ROI Calculator | RLDatix","description":"smart match ROI Calculator. Discover health & care software solutions designed to support patient safety, compliance and operational efficiency.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/","og_locale":"en_GB","og_type":"article","og_title":"smart match ROI Calculator","og_description":"smart match ROI Calculator. Discover health & care software solutions designed to support patient safety, compliance and operational efficiency.","og_url":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/","og_site_name":"UK &amp; Ireland","article_modified_time":"2026-10-07T09:52:25+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.rldatix.com\/en-uki\/wp-content\/uploads\/sites\/6\/2025\/08\/OpenGraph-Image_UK-1.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@rldatixuki","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/","url":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/","name":"smart match ROI Calculator | RLDatix","isPartOf":{"@id":"https:\/\/www.rldatix.com\/en-uki\/#website"},"datePublished":"2026-08-06T12:35:43+00:00","dateModified":"2026-10-07T09:52:25+00:00","description":"smart match ROI Calculator. Discover health & care software solutions designed to support patient safety, compliance and operational efficiency.","breadcrumb":{"@id":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/"]}],"about":{"@id":"https:\/\/www.rldatix.com\/en-uki\/#organization"}},{"@type":"BreadcrumbList","@id":"https:\/\/www.rldatix.com\/en-uki\/smart-match-roi-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"RLDatix \u2013 UK &amp; Ireland","item":"https:\/\/www.rldatix.com\/en-uki\/"},{"@type":"ListItem","position":2,"name":"smart match ROI Calculator"}]},{"@type":"WebSite","@id":"https:\/\/www.rldatix.com\/en-uki\/#website","url":"https:\/\/www.rldatix.com\/en-uki\/","name":"RLDatix \u2013 UK & Ireland","description":"RLDatix, the real life decisions software solutions driving health in healthcare, helping organise, reduce harm, improve safety and strengthen patient and staff outcomes through systemwide decision making","publisher":{"@id":"https:\/\/www.rldatix.com\/en-uki\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.rldatix.com\/en-uki\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.rldatix.com\/en-uki\/#organization","name":"RLDatix \u2013 UK & Ireland","url":"https:\/\/www.rldatix.com\/en-uki\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.rldatix.com\/en-uki\/#\/schema\/logo\/image\/","url":"https:\/\/www.rldatix.com\/en-uki\/wp-content\/uploads\/sites\/6\/2024\/08\/logo-dark.svg","contentUrl":"https:\/\/www.rldatix.com\/en-uki\/wp-content\/uploads\/sites\/6\/2024\/08\/logo-dark.svg","caption":"RLDatix \u2013 UK & Ireland"},"image":{"@id":"https:\/\/www.rldatix.com\/en-uki\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/rldatixuki","https:\/\/www.linkedin.com\/company\/rldatix-uki\/","https:\/\/www.youtube.com\/@TheConnectionRLDatix"],"areaServed":"Worldwide","parentOrganization":{"@id":"https:\/\/www.rldatix.com\/#organization"}},{"@type":"Organization","@id":"https:\/\/www.rldatix.com\/#organization","name":"RLDatix","url":"https:\/\/www.rldatix.com\/"}]}},"permalink_manager":null,"_links":{"self":[{"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/pages\/11985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/comments?post=11985"}],"version-history":[{"count":0,"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/pages\/11985\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rldatix.com\/en-uki\/wp-json\/wp\/v2\/media?parent=11985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}