# Name: smd_prognostics v0.16 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in TXP # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTYiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjY1NTUzOiIvLyBUT0RPOiBjaGVj ayBudW1iZXIgb2YgZmlsZSBhZGRpdGlvbnMgcGVyIGRpciAoaGFzaCB0aGUgZW50aXJlIGRp ciBpbiBvbmUgb3BlcmF0aW9uPykgYW5kIG9ubHkgcmVhZCB0aGUgZmlsZXMgaWYgdGhlcmUn cyBhIGRpZmZlcmVuY2UNCmdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zcWxwcm90Ow0KJHNtZF9w cm9nbm9zdGljc19ldmVudCA9ICdzbWRfcHJvZ25vc3RpY3MnOw0KJHNtZF9wcm9nbm9zdGlj c19jaGVja3N1bXMgPSBydHJpbShnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4 cGF0aCwgMSksIERTKSAuIERTIC4gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgn LCAnJykuJ3NtZF9wcm9nbm9zdGljc19jaGVja3N1bXMudHh0JzsNCiRoZHJvbiA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJyk7DQokc21kX3Byb2dub3N0 aWNzX3NxbHByb3QgPSBuZXcgc21kX3Byb2dfUGhQcm90ZWN0b3IoZmFsc2UpOw0KDQppZiAo QHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUsICR0eHBfdXNlciwgJGV2ZW50Ow0KDQoJJHNtZF9wcm9nbm9zdGljc19wcml2cyA9 ICcxLDInOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgPSBncHMoJ3NtZF9wcm9nbm9z dGljc19zdXBwcmVzcycpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3R5bGUgPSBhcnJheSgNCgkJ J21zZycgPT4NCiAgICAgICAgICcuc21kX3Byb2dfd2FybiB7IG1hcmdpbjowIGF1dG8gMTBw eDsgd2lkdGg6NTAwcHg7IGJhY2tncm91bmQ6I2ZmYzsgYm9yZGVyOjJweCBkYXNoZWQgcmVk OyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0NDQ7IH0NCiAgICAgICAgICAuc21kX3Byb2dfd2Fy biBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Izk2MzsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ193YXJuIHNwYW4geyBmb250LXdlaWdodDpib2xkOyB9DQogICAgICAgICAgLnNtZF9w cm9nX3dhcm4gZGl2IHsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFkZGluZy1ib3R0b206MTBweDsg fScsDQoJCSdzZXR1cCcgPT4NCiAgICAgICAgICcuc21kX2xhYmVsIHsgdGV4dC1hbGlnbjpy aWdodCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTsgfQ0KICAgICAgICAgIC5z bWRfcHJvZ19idG5zIGZvcm0geyBkaXNwbGF5OmlubGluZTsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBtYXJnaW46MjVweCAwIDA7IH0nLA0KCQknbWV0ZXIn ID0+DQogICAgICAgICAnI3NtZF9wcm9nX21ldGVyIHsgbWFyZ2luOjAgYXV0bzsgYm9yZGVy OjFweCBzb2xpZCAjY2NjOyB3aWR0aDozNjBweDsgcGFkZGluZzo1cHg7IGZvbnQtc2l6ZTox MjAlOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3Bhc3Nfc3RyZW5ndGggeyBjb2xvcjpncmVl bjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScsDQoJCSdhZHZpY2UnID0+DQogICAgICAgICAnLnNt ZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1MHB4OyB9DQogICAgICAgICAgI2xpc3Quc21kX3By b2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1cHg7IH0NCiAgICAgICAgICAuc21kX3Byb2dfYnRu cyB7IHdpZHRoOjE0MHB4OyB9JywNCgkpOw0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJp dnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIiciKTsN CgkkdXNlcnMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3VzZXJzJywgJycpOw0KCSRh bGxvdyA9ICgkdXNlcnMpID8gaW5fYXJyYXkoJHR4cF91c2VyLCBkb19saXN0KCR1c2Vycykp IDogdHJ1ZTsNCglpZiAoJGFsbG93KSB7DQoJCWFkZF9wcml2cygkc21kX3Byb2dub3N0aWNz X2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZzKTsNCgkJYWRkX3ByaXZzKCdwbHVnaW5f cHJlZnMuJy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZz KTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycpKTsNCgkJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19zZXR1cCcsICdwbHVnaW5fcHJlZnMuJy4k c21kX3Byb2dub3N0aWNzX2V2ZW50KTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9n bm9zdGljc19kaXNwYXRjaGVyJywgJHNtZF9wcm9nbm9zdGljc19ldmVudCk7DQoJfQ0KDQoJ Ly8gUGFzc3dvcmQgY2hlY2tlciBnb2VzIG9uIHRoZSBBZG1pbi0+VXNlcnMgdGFiIGZvciBh bGwgdXNlcnMNCglpZiAoJGV2ZW50ID09ICdhZG1pbicpIHsNCgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJlbmd0aCcsICdhZG1pbl9zaWRlJywgJ2hl YWRfZW5kJyk7DQoJfQ0KDQoJaWYgKCRoZHJvbikgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVycycsICdhZG1pbl9zaWRlJywgJ2hlYWRf ZW5kJyk7DQoJfQ0KDQoJLy8gQWRtaW4gc2lkZSBjYWxsYmFjayBmb3IgY2hlY2tpbmcgZmls ZXMNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZz LCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3NfcHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2FkbWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsN Cgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNhbGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlJywgJycpLCAncHVibGljJykgIT09IGZh bHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0 Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9z dGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJldGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAnc21kX25vJyksICdzbWRfbm8n KSA9PT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19kaXNwYXRjaGVyKCRldnQsICRzdHApIHsN CglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJyYXkoDQoJCQknc21kX3Byb2dub3N0 aWNzX2ZpbGVzJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc2V0dXAnLA0KCQkJJ3NtZF9wcm9n bm9zdGljc19hZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19hY2snLA0KCQkpKSkgew0K CQlzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8v IFN0dWIgdG8gY2FsbCB0aGUgdmVyaWZpY2F0aW9uIGNvZGUgZnJvbSB0aGUgVVJMDQpmdW5j dGlvbiBzbWRfcHJvZ25vc3RpY3MoJGV2dCwgJHN0cCkgew0KCXJldHVybiBzbWRfZG9fcHJv Z25vc3RpY3MoKTsNCn0NCg0KLy8gVmVyaWZ5IHRoZSBmaWxlIGNoZWNrc3Vtcw0KLy8gJG1v ZGUgPSAwOiBub3JtYWwgLyAxOiBubyB1cGRhdGUgKHJldHVybiBhcnJheXMgb25seSkgLyAy OiBzaWxlbnQgdXBkYXRlDQpmdW5jdGlvbiBzbWRfZG9fcHJvZ25vc3RpY3MoJG1vZGU9MCkg ew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2No ZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsNCg0KCSRub3cgPSB0aW1lKCk7DQoJ JG5vayA9ICRtaXNzID0gJGFkZGVkID0gJGFsbGZpbGVzID0gJGhhc2hkb3duID0gJGhhc2ht b2QgPSBhcnJheSgpOw0KCSR0aW1lbm93ID0gZGF0ZSgnSDppOnMnLCAkbm93KTsNCglsaXN0 KCRiZWcsICRlbmQpID0gZG9fbGlzdChnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNr X2JldHdlZW4nLCAnfCcpLCAnfCcpOyAvLyBEZWZhdWx0IGlzIHBpcGUgc28gd2UgY2FuIGd1 YXJhbnRlZSB0d28gcmV0dXJuIHZhbHMNCgkkdGRpZmYgPSAoJG1vZGU9PTEgfHwgKCRub3cg LSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RjaGVjaycsIDApID4gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19jaGVja19mcmVxJywgMzYwMCkpICYmICgkdGltZW5vdz4kYmVn KSAmJiAoJHRpbWVub3c8JGVuZCkgKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFBhcnRzIHNo YW1lbGVzc2x5IHBsYWdpYXJpc2VkIGZyb20gdHhwX2RpYWcNCglpZiAoJHRkaWZmKSB7DQoJ CSRzdW1oYXNoID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1oYXNoJywgTlVMTCwg KCRtb2RlPT0xID8gMSA6IDApKTsNCgkJJGxvb2thdCA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yJywgJycpOw0KCQkkYWRkcyA9IChzdHJwb3MoJGxvb2thdCwgJ2Fk ZCcpICE9PSBmYWxzZSk7DQoJCSRkZWxzID0gKHN0cnBvcygkbG9va2F0LCAnZGVsZXRlJykg IT09IGZhbHNlKTsNCgkJJG1vZHMgPSAoc3RycG9zKCRsb29rYXQsICdtb2RpZnknKSAhPT0g ZmFsc2UpOw0KDQoJCWlmICgkY3MgPSBAZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vt cykpIHsNCgkJCSRoYXNoID0gbWQ1KHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXMpKTsNCgkJCWlmICgkaGFzaCAhPSAkc3VtaGFzaCkgew0K CQkJCSRoYXNobW9kW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJCX0gZWxz ZSB7DQoJCQkJJGN0ciA9IDA7DQoJCQkJJHF0eV9wZXIgPSAoKCRxdHkgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eScsICcnKSkgPT0gJycpID8gY291bnQoJGNzKSA6 ICRxdHk7DQoJCQkJJHNvX2ZhciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcXR5X3Nv X2ZhcicsIDApOw0KCQkJCSR1bnRpbCA9ICRzb19mYXIgKyAkcXR5X3BlcjsNCgkJCQlmb3Jl YWNoICgkY3MgYXMgJGMpIHsNCgkJCQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4q KVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRt Ow0KCQkJCQkJaWYgKCRkZWxzICYmICFmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkk bWlzc1tdID0gJGZpbGU7DQoJCQkJCQl9IGVsc2UgaWYgKCRtb2RzICYmICRtZDUgIT0gJ05V TEwnKSB7DQoJCQkJCQkJaWYgKCBmaWxlX2V4aXN0cygkZmlsZSkgJiYgKCAoKCRjdHIgPj0g JHNvX2ZhcikgJiYgKCRjdHIgPCAkdW50aWwpIHx8ICRtb2RlID09IDEpICkgKSB7DQoJCQkJ CQkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkJ CQkJCWlmICgobWQ1KCRjb250ZW50KSAhPSAkbWQ1KSAmJiAoJGZpbGUgIT0gJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQkJCQkJCQkkbm9rW10gPSAkZmlsZTsNCgkJCQkJ CQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQkkY3RyKys7DQoJCQkJCQl9DQoJCQkJCQkkYWxsZmls ZXNbXSA9ICRmaWxlOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gU3Rhc2ggdGhlIHN0b3J5 IHNvIGZhciByZWFkeSBmb3IgbmV4dCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQNCgkJ CQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3F0 eV9zb19mYXInLCAoKCR1bnRpbCA8ICRjdHIpID8gJHVudGlsIDogMCksICdzbWRfcHJvZ25v cycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCQlpZiAoJGFkZHMp IHsNCgkJCQkJJGZpbGVsaXN0ID0gc21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpOw0KCQkJ CQkkYWRkZWQgPSBhcnJheV9kaWZmKCRmaWxlbGlzdCwgJGFsbGZpbGVzKTsNCgkJCQl9DQoN CgkJCQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2xhc3RjaGVjaycsICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCS8vIEZpbGUgZG9lc24ndCBl eGlzdA0KCQkJJGhhc2hkb3duW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJ fQ0KCX0NCg0KCS8vIEFzc2VtYmxlIG1lc3NhZ2UNCglpZiAoJG5vayB8fCAkbWlzcyB8fCAk YWRkZWQgfHwgJGhhc2hkb3duIHx8ICRoYXNobW9kKSB7DQoJCWlmICgkbW9kZT09MSkgew0K CQkJcmV0dXJuIGFycmF5KCRub2ssICRtaXNzLCAkYWRkZWQsICRoYXNoZG93biwgJGhhc2ht b2QpOw0KCQl9IGVsc2Ugew0KCQkJJHZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bm90aWZ5X3ZpYScsICcnKTsNCgkJCSRkZXRlY3QgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2xhc3RkZXRlY3QnLCAnJyk7DQoJCQkkbGFzdHMgPSBleHBsb2RlKCcsJywgZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgMCkpOw0KCQkJJGZyZXFzID0gZXhwbG9k ZSgnLCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsIDg2NDAwKSk7 DQoJCQlpZiAoIWlzc2V0KCRsYXN0c1sxXSkpIHsNCgkJCQkkbGFzdHNbMV0gPSAkbGFzdHNb MF07DQoJCQl9DQoJCQlpZiAoIWlzc2V0KCRmcmVxc1sxXSkpIHsNCgkJCQkkZnJlcXNbMV0g PSAkZnJlcXNbMF07DQoJCQl9DQoNCgkJCSRsYXN0YWN0X3R4cCA9ICgkbW9kZSA8IDIgJiYg KCRub3cgLSAkbGFzdHNbMF0gPiAkZnJlcXNbMF0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRs YXN0YWN0X21haWwgPSAoJG1vZGUgPCAyICYmICgkbm93IC0gJGxhc3RzWzFdID4gJGZyZXFz WzFdKSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkbGFzdG1zZyA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfbGFzdG1zZycsICcnKTsNCg0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnc3ViamVjdCcpOw0KCQkJJG1zZyA9IGpvaW4oJ3wnLCBhcnJheV9tZXJnZSgk aGFzaGRvd24sICRoYXNobW9kLCAkbm9rLCAkbWlzcywgJGFkZGVkKSk7DQoNCgkJCWlmIChA dHhwaW50ZXJmYWNlID09ICdhZG1pbicgJiYgc3RycG9zKCR2aWEsICd0eHAnKSAhPT0gZmFs c2UpIHsNCgkJCQlpZiAoJGxhc3RhY3RfdHhwIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykp KSB7DQoJCQkJCSR0eHBkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3R4cGRpcics IGh1LnNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9kaXIoKSk7DQoJCQkJCSRvdXQgPSAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ21zZydd Lic8L3N0eWxlPjxkaXYgY2xhc3M9InNtZF9wcm9nX3dhcm4iPjxkaXY+Jy4kc3ViamVjdC4n PC9kaXY+Jy4NCgkJCQkJCSgoJGhhc2hkb3duKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19n VHh0KCdwcmVhbWJsZV9oYXNoZG93bicpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxp PicsJGhhc2hkb3duKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRoYXNobW9kKSA/ ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9oYXNobW9kJykuJzwvcD48 dWw+PGxpPicuam9pbignPC9saT48bGk+JywkaGFzaG1vZCkuJzwvbGk+PC91bD4nIDogJycp Lg0KCQkJCQkJKCgkbm9rKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9ub2snKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRub2spLic8L2xpPjwv dWw+JyA6ICcnKS4NCgkJCQkJCSgoJG1pc3MpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ3ByZWFtYmxlX21pc3MnKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRt aXNzKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRhZGRlZCkgPyAnPHA+Jy5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS4nPC9wPjx1bD48bGk+Jy5qb2lu KCc8L2xpPjxsaT4nLCRhZGRlZCkuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJJzxwPjxh IGhyZWY9IicuJHR4cGRpci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNtZF9wcm9nbm9zdGljc19z dXBwcmVzcz0xIj4nLg0KCQkJCQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScp Lic8L2E+PC9wPjwvZGl2Pic7DQoNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0YWN0JywgJG5vdy4nLCcuJGxhc3RzWzFdLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERF TiwgJ3RleHRfaW5wdXQnKTsNCgkJCQkJZWNobyAkb3V0Ow0KCQkJCX0NCgkJCX0NCg0KCQkJ aWYgKHN0cnBvcygkdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJGxhc3Rh Y3RfbWFpbCB8fCAoJGxhc3Rtc2cgIT0gbWQ1KCRtc2cpKSkgew0KCQkJCQkkdG8gPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX21haWx0bycsICcnKTsNCgkJCQkJaWYgKCR0bykgew0K CQkJCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9wcm9nbm9z dGljcycpOw0KCQkJCQkJJGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3By b2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRv d24pIDogJycpLg0KCQkJCQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncHJlYW1ibGVfaGFzaG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJ CQkJCSgoJG5vaykgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5u Lm4uam9pbihuLCRub2spIDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9n bm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJyku DQoJCQkJCQkJKCgkYWRkZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9hZGRlZCcpLm4ubi5qb2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhy ZWY9IicuJGhkcnNbJ3R4cGRpciddLicvaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9nbm9z dGljc19ldmVudC4nJnN0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3M9MSI+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9zdGFtYmxlJykuJzwvYT4n Ow0KCQkJCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7 DQoJCQkJCX0NCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgJGxh c3RzWzBdLicsJy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsNCgkJCQl9DQoJCQl9DQoJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rt c2cnLCBtZDUoJG1zZyksICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQkJaWYgKCRsYXN0bXNnICE9IG1kNSgkbXNnKSkgew0KCQkJCWlmICgkZGV0ZWN0 ID09ICcnKSB7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcs ICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRkZXRlY3QgPSBleHBsb2RlKCcsJywkZGV0ZWN0KTsNCgkJCQkJ c2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJGRldGVjdFswXS4nLCcu JG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tICBDYXRjaCB1bmV4cGVjdGVk IHJlcXVlc3QgaGVhZGVycw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVh ZGVycygkZXZ0LCAkc3RwKSB7DQoJJGJsb2NrID0gZXhwbG9kZSgnfCcsIGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJykpOw0KCSRoZHIgPSBzZXJ2ZXJTZXQo J1JFUVVFU1RfTUVUSE9EJyk7DQoNCglpZiAoaW5fYXJyYXkoJGhkciwgJGJsb2NrKSkgew0K CQkkc2VuZCA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MnKSwgJ2hkcicpICE9PSBmYWxzZSk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9m ZiBpZiBuZWNlc3NhcnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWls dG9fY3NpJywgJycpOw0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNt ZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJv Z25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBu LnNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfbm90X2FsbG93ZWQnLCBhcnJheSgne3JlcX0n ID0+ICRoZHIpKS5uOw0KCQkJZm9yZWFjaCAoJF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VO ViBhcyAka2V5ID0+ICR2YXIpIHsNCgkJCQkkYm9keSAuPSBuLiRrZXkuJzogJy4kdmFyOw0K CQkJfQ0KCQ0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMn XSk7DQoJCX0NCg0KCQkvL1RPRE86IG9mZmVyIGFsdGVybmF0aXZlIGRpZSBtZWNoYW5pc21z IGxpa2UgU1FMIGF0dGFja3M/DQoJCWV4aXQoMSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t ICBTUUwgaW5qZWN0aW9uIGRldGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdCwgJHBlcm1s aW5rX21vZGU7DQoNCgkvLyBEZXRlcm1pbmUgY29tbWVudCBwcmV2aWV3IHN0ZXAgYW5kIGln bm9yZSBpZiBzbw0KCSRpc19wcmV2dSA9IGZhbHNlOw0KCSRjb20gPSBwc2EoYXJyYXkoDQoJ CSdwYXJlbnRpZCcsDQoJCSdwcmV2aWV3JywNCgkJJ2JhY2twYWdlJywNCgkpKTsNCglpZiAo JGNvbVsncHJldmlldyddKSB7DQoJCSR1cmxwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkY29tWydi YWNrcGFnZSddKTsNCgkJJG51bSA9ICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSA/IDEg OiBjb3VudCgkdXJscGFydHMpOw0KCQkkYXJ0aWMgPSBzYWZlX2ZpZWxkKCdpZCcsJ3RleHRw YXR0ZXJuJywgIklEPSIuZG9TbGFzaCgkY29tWydwYXJlbnRpZCddKS4oKCRudW0gPiAxKSA/ ICIgQU5EIHVybF90aXRsZT0nIi5kb1NsYXNoKCR1cmxwYXJ0c1skbnVtLTFdKS4iJyIgOiAn JykpOw0KCQkkaXNfcHJldnUgPSAoJGFydGljKSA/IHRydWUgOiBmYWxzZTsNCgl9DQoJaWYo ISRpc19wcmV2dSAmJiAkc21kX3Byb2dub3N0aWNzX3NxbHByb3QtPmlzTWFsaWNpb3VzKCkp IHsNCgkJJG9wdHMgPSBkb19saXN0KGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2lu amVjdCcsICd8JyksICd8Jyk7DQoJCSRibG9rID0gKHN0cnBvcygkb3B0c1swXSwgJ3NtZF9i bG9jaycpICE9PSBmYWxzZSk7DQoJCSRzZW5kID0gKHN0cnBvcyhnZXRfcHJlZignc21kX3By b2dub3N0aWNzX3J0X2ZvcmVuc2ljcycpLCAnc3FsJykgIT09IGZhbHNlKTsNCgkJJHZlciA9 IChkZWZpbmVkKCd0eHBfdmVyc2lvbicpKSA/IHR4cF92ZXJzaW9uIDogZ2V0X3ByZWYoJ3Zl cnNpb24nLCAnJyk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9mZiBpZiBuZWNlc3Nh cnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycp Ow0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVh ZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9z dGljc19nVHh0KCdwcmVhbWJsZV9zcWxfaW5qZWN0JykubjsNCgkJCSRib2R5IC49ICgoJHZl cikgPyAnVFhQOiAnIC4gJHZlciAubiA6ICcnKSAuICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkg Lm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxh YmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92 ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNUICsg JF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcuJHZh cjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRl cnMnXSk7DQoJCX0NCg0KCQlpZiAoaXNzZXQoJG9wdHNbMV0pICYmICFlbXB0eSgkb3B0c1sx XSkpIHsNCgkJCSRwYXJ0cyA9IGRvX2xpc3QoJG9wdHNbMV0sICc6Jyk7DQoJCQlpZiAoJHBh cnRzWzBdID09ICd0eHBfZm9ybScpIHsNCgkJCQkkbXNnID0gcGFyc2VfZm9ybSgkcGFydHNb MV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkkbXNnID0gJG9wdHNbMV07DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQkkbXNnID0gJyc7DQoJCX0NCg0KCQlpZiAoJGJsb2spIHsNCgkJCWVjaG8gJG1z ZzsNCgkJCWV4aXQoMSk7DQoJCX0gZWxzZSB7DQoJCQl0eHBfZGllKCRtc2csICRvcHRzWzBd KTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkbWluLXNpZGUg cGFuZWxzDQovLyAtLS0tLS0tLS0tLS0tLS0tLQ0KLy8gLS0tLS0tLS0tLSAgQWxhcm0gYWNr bm93bGVkZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYWNrKCRtc2c9JycpIHsN CglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVj a3N1bXMsICRwcmVmczsNCg0KCSRzdWJtaXQgPSBncHMoJ3N1Ym1pdCcpOw0KCSRpZ25vcmUg PSBncHMoJ2lnbm9yZScpOw0KCSRjc2kgPSBncHMoJ2NzaScpOw0KDQoJJGFjayA9IGdwcygn c2VsZWN0ZWQnKTsNCgkkc21kX3Byb2dfYWNrID0gKGlzX2FycmF5KCRhY2spKSA/ICRhY2sg OiAoKCRhY2spID8gYXJyYXkoJGFjaykgOiBhcnJheSgpKTsNCg0KCSRvdXQgPSBhcnJheSgp Ow0KDQoJaWYgKCRzdWJtaXQgfHwgJGlnbm9yZSkgew0KCQlpZiAoJGNzID0gQGZpbGUoJHNt ZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQlmb3JlYWNoICgkY3MgYXMgJGMpIHsN CgkJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0oJGMpLCAk bSkpIHsNCgkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJaWYgKCgka2V5ID0g YXJyYXlfc2VhcmNoKCRmaWxlLCAkc21kX3Byb2dfYWNrKSkgIT09IGZhbHNlKSB7DQoJCQkJ CQlpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJv Z25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkkb3V0W10gPSAkZmlsZS4nOiAo Jy4oICgkaWdub3JlKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkgKS4nKSc7DQoJCQkJCQl9 DQoJCQkJCQkvLyBSZW1vdmUgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgY2hlY2tzdW1zIHNv IHdlJ3JlIGxlZnQgd2l0aCBhZGRpdGlvbnMNCgkJCQkJCXVuc2V0KCRzbWRfcHJvZ19hY2tb JGtleV0pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG91dFtdID0gdHJpbSgkYyk7DQoJCQkJ CX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFRhY2sgb24gYW55IG5ldyBmaWxlcw0KCQkJZm9y ZWFjaCAoJHNtZF9wcm9nX2FjayBhcyAkZmlsZSkgew0KCQkJCWlmIChmaWxlX2V4aXN0cygk ZmlsZSkgJiYgJGZpbGUgIT0gJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpIHsNCgkJCQkJ JGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJJG91 dFtdID0gJGZpbGUuJzogKCcuKCAoJGlnbm9yZSkgPyAnTlVMTCcgOiBtZDUoJGNvbnRlbnQp ICkuJyknOw0KCQkJCX0NCgkJCX0NCgkJCSRmaCA9IGZvcGVuKCRzbWRfcHJvZ25vc3RpY3Nf Y2hlY2tzdW1zLCAidyIpOw0KCQkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0KSk7DQoJCQlm Y2xvc2UoJGZoKTsNCgkJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hhc2goKTsNCgkJCSRtc2cg PSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWNrZWQnKTsNCgkJfQ0KCX0NCglpZiAoJGNzaSAm JiAkc21kX3Byb2dfYWNrKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Nz aV9zZW50Jyk7DQoJfSBlbHNlIGlmICgkY3NpKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0 aWNzX2dUeHQoJ25vbmVfc2VsZWN0ZWQnKTsNCgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9z dGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJv Z25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCWxpc3QoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhh c2hkb3duLCAkaGFzaG1vZCkgPSBzbWRfZG9fcHJvZ25vc3RpY3MoMSk7DQoJJG5vayA9IGlz X2FycmF5KCRub2spID8gJG5vayA6IGFycmF5KCk7DQoJJG1pc3MgPSBpc19hcnJheSgkbWlz cykgPyAkbWlzcyA6IGFycmF5KCk7DQoJJGFkZGVkID0gaXNfYXJyYXkoJGFkZGVkKSA/ICRh ZGRlZCA6IGFycmF5KCk7DQoJJGhhc2htb2QgPSBpc19hcnJheSgkaGFzaG1vZCkgPyAkaGFz aG1vZCA6IGFycmF5KCk7DQoJJGVycm51bSA9IGNvdW50KGFycmF5X21lcmdlKCRub2ssICRt aXNzLCAkYWRkZWQsICRoYXNobW9kKSk7DQoJJGZvcmVuc2ljcyA9IGFycmF5KCk7DQoJJGxm b3JtID0gJ1ktbS1kIEg6aTpzJzsNCg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0 Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfYWNr JykpLCAnIGNvbHNwYW49IjMiJykgLiB0ZGEoJGJ0blNldHVwLiRidG5GaWxlcy4kYnRuQWR2 aWNlLCAkYnRuU3R5bGUpICk7DQoJZWNobyAnPGZvcm0gbmFtZT0ibG9uZ2Zvcm0iIG1ldGhv ZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4 O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+ JzsNCglpZiAoJGVycm51bSA+IDApIHsNCgkJZm9yZWFjaCgkaGFzaG1vZCBhcyAkbmF1Z2h0 eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAkc21kX3Byb2dfYWNrKTsNCgkJ CWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAkbmF1Z2h0eSwgJHNlbCksICcn LCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbGJsX2hhc2htb2Qn KSkudGRhKCRuYXVnaHR5KSk7DQoJCX0NCgkJZm9yZWFjaCgkbm9rIGFzICRuYXVnaHR5KSB7 DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNo byB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdt dWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdsYmxfY2hhbmdlZCcpKS50 ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgkc2VsKSB7DQoJCQkJJGZpID0gc3RhdCgkbmF1Z2h0 eSk7DQoJCQkJJGZvcmVuc2ljc1snbm9rJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3JlbnNp Y19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVskbmF1 Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRu YXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWZvcmVhY2goJG1pc3MgYXMgJG5hdWdodHkpIHsN CgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hv IHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211 bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xibF9taXNzaW5nJykpLnRk YSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRzZWwpIHsNCgkJCQkkZm9yZW5zaWNzWydtaXNzJ11b XSA9ICRuYXVnaHR5Ow0KCQkJfQ0KCQl9DQoJCWZvcmVhY2goJGFkZGVkIGFzICRuYXVnaHR5 KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJ ZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycs ICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdsYmxfYWRkZWQnKSku dGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJCSRmaSA9IHN0YXQoJG5hdWdo dHkpOw0KCQkJCSRmb3JlbnNpY3NbJ2FkZGVkJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3Jl bnNpY19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVsk bmF1Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRz KCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWlmICgkc21kX3Byb2dfYWNrICYmICRwcmVm c1snbG9nZ2luZyddICE9ICdub25lJykgew0KCQkJJGRldGVjdCA9IGV4cGxvZGUoJywnLGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsIHRpbWUoKSkpOw0KCQkJaWYg KCFpc3NldCgkZGV0ZWN0WzFdKSkgew0KCQkJCSRkZXRlY3RbMV0gPSAkZGV0ZWN0WzBdOw0K CQkJfQ0KCQkJJHJzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9sb2cnLCAidGltZSBCRVRXRUVO ICciIC4gZGF0ZSgkbGZvcm0sICgkZGV0ZWN0WzBdIC0gJHByZWZzWydzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tfZnJlcSddKSkgLiAiJyBBTkQgJyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRlY3Rb MV0gKyA1KSkgLiAiJyIpOw0KCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkZm9y ZW5zaWNzWyd0eHBfbG9nJ11bXSA9IGpvaW4oJywnLCRyb3cpOw0KCQkJfQ0KCQl9DQoJCWVj aG8gdHIodGRhKA0KCQkJCXNlbGVjdF9idXR0b25zKCkNCgkJCSwnIGNsYXNzPSJtdWx0aS1l ZGl0IiBjb2xzcGFuPSIzIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9u ZTsiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuQWNrSXQuJGJ0bklnbm9yZS4oKGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKSkgPyAkYnRuQ1NJIDogJycpLCAk YnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRyKHRkKHNtZF9wcm9nbm9zdGljc19n VHh0KCdub19hbGFybXMnKSkpOw0KCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rk ZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7 DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWlmICgkY3Np ICYmICRmb3JlbnNpY3MpIHsNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9mZg0KCQkkdG8g PSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0b19jc2knLCAnJyk7DQoJCWlmICgk dG8pIHsNCgkJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N1YmplY3RfY3Np Jyk7DQoJCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFkZXJfaW5mbygnc21kX2Zyb2du b3N0aWNzJyk7DQoJCQkkYm9keSA9DQoJCQkJbi4nVFhQOiAnIC4gdHhwX3ZlcnNpb24gLm4u ICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkgLm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2 ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxhYmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAn QXBhY2hlOiAnIC4gYXBhY2hlX2dldF92ZXJzaW9uKCkubiA6ICcnKS4NCgkJCQkoKGlzc2V0 KCRmb3JlbnNpY3NbJ25vayddKSkgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9ub2snKS5uLmpvaW4obiwkZm9yZW5zaWNzWydub2snXSkgOiAnJykuDQoJCQkJKChpc3Nl dCgkZm9yZW5zaWNzWydtaXNzJ10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJl YW1ibGVfbWlzcycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ21pc3MnXSkgOiAnJykuDQoJCQkJ KChpc3NldCgkZm9yZW5zaWNzWydhZGRlZCddKSkgPyBuLm4uc21kX3Byb2dub3N0aWNzX2dU eHQoJ3ByZWFtYmxlX2FkZGVkJykubi5qb2luKG4sJGZvcmVuc2ljc1snYWRkZWQnXSkgOiAn JykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWyd0eHBfbG9nJ10pKSA/IG4ubi5zbWRfcHJv Z25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfdHhwbG9nJykubi5qb2luKG4sJGZvcmVuc2ljc1sn dHhwX2xvZyddKSA6IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm9fbG9nX2VudHJpZXMn KSk7DQoJCQlpZiAoaXNzZXQoJGZvcmVuc2ljc1snZmlsZXMnXSkpIHsNCgkJCQkkYm9keSAu PSBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2ZpbGVzJyk7DQoJCQkJZm9y ZWFjaCAoJGZvcmVuc2ljc1snZmlsZXMnXSBhcyAkZm4gPT4gJGNvbnRlbnQpIHsNCgkJCQkJ JGJvZHkgLj0gbi5uLiRmbi5uLm4uJGNvbnRlbnQubjsNCgkJCQl9DQoJCQl9DQoNCgkJCW1h aWwoJHRvLCAkc3ViamVjdCwgJGJvZHksICRoZHJzWydoZWFkZXJzJ10pOw0KCQl9DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tIEZpbGUgbWFuYWdlbWVudA0KZnVuY3Rpb24gc21kX3Byb2du b3N0aWNzX2ZpbGVzKCRtc2c9JycpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnc3VibWl0JykpKSk7DQoJJHNtZF9wcm9nbm9zdGljc19maWxlcyA9IGdwcygn c21kX3Byb2dub3N0aWNzX2ZpbGVzJyk7DQoJaWYgKCFpc19hcnJheSgkc21kX3Byb2dub3N0 aWNzX2ZpbGVzKSkgew0KCQkkc21kX3Byb2dub3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsNCgl9 DQoNCgkkYWRkcyA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3InKSwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGZpbGVsaXN0ID0gc21kX3Byb2dub3N0aWNz X3JlYWRmaWxlcygpOw0KCSRhbGxjb3VudCA9IGNvdW50KCRmaWxlbGlzdCk7DQoNCglpZiAo JHN1Ym1pdCkgew0KCQkkb3V0ZmlsZSA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfcHJv Z25vc3RpY3NfZmlsZXMgYXMgJGZpbGUpIHsNCgkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0 aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkkb3V0ZmlsZVtdID0gJGZpbGUuJzogKCcubWQ1 KCRjb250ZW50KS4nKSc7DQoJCX0NCg0KCQkkZmggPSBmb3Blbigkc21kX3Byb2dub3N0aWNz X2NoZWNrc3VtcywgInciKTsNCgkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0ZmlsZSkpOw0K DQoJCWlmICgkYWRkcykgew0KCQkJJGFkZGl0aW9ucyA9IGFycmF5X2RpZmYoJGZpbGVsaXN0 LCAkc21kX3Byb2dub3N0aWNzX2ZpbGVzKTsNCgkJCSRhZGRlZCA9IGFycmF5KCk7DQoJCQlm b3JlYWNoICgkYWRkaXRpb25zIGFzICRhZGRpdGlvbikgew0KCQkJCSRhZGRlZFtdID0gJGFk ZGl0aW9uLic6IChOVUxMKSc7DQoJCQl9DQoJCQlmd3JpdGUoJGZoLCBuLmpvaW4obiwgJGFk ZGVkKSk7DQoJCX0NCgkJZmNsb3NlKCRmaCk7DQoJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hh c2goKTsNCgkJc21kX2RvX3Byb2dub3N0aWNzKDIpOyAvLyBTaWxlbnRseSBhY2tub3dsZWRn ZSBhbGwgdGhlIGZpbGVzDQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVj dCcsICcnLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJ JG1zZyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdmaWxlc191cGRhdGVkJyk7DQoJfQ0KDQoJ cGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cp Ow0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkkc21kX3Byb2du b3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsNCglpZiAoJGNzID0gQGZpbGUoJHNtZF9wcm9nbm9z dGljc19jaGVja3N1bXMpKSB7DQoJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJaWYgKHBy ZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4qKVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJ bGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQlpZiAoJG1kNSAhPSAnTlVMTCcpIHsNCgkJ CQkJJHNtZF9wcm9nbm9zdGljc19maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJfQ0KDQoJJG1vbmNvdW50ID0gY291bnQoJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoN CglpZiAoJGZpbGVsaXN0KSB7DQoJCSRmaWxleiA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGZp bGVsaXN0IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJJGZpbGV6WyR2YWxdID0gJGZpbGVsaXN0 WyRrZXldOw0KCSAgIH0NCgkJJGZpbGVzZWwgPSBzbWRfcHJvZ25vc3RpY3NfbXVsdGlzZWwo J3NtZF9wcm9nbm9zdGljc19maWxlcycsICRmaWxleiwgJHNtZF9wcm9nbm9zdGljc19maWxl cyk7DQoJfQ0KCSRzaG93ZmlsZXMgPSAoaXNzZXQoJGZpbGVzZWwpICYmICRmaWxlc2VsKTsN Cg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ry b25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfZmlsZXMnKSkpIC4gdGRhKCRidG5TZXR1 cC4kYnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvIHRyKHRkY3Moc21k X3Byb2dub3N0aWNzX2dUeHQoJ2N1cnJtb24nLCBhcnJheSgne2N1cnJ9JyA9PiAkbW9uY291 bnQsICd7b3V0b2Z9JyA9PiAkYWxsY291bnQpKSAuKCgkc2hvd2ZpbGVzKSA/IGJyLmJyLiBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnbW9uZmlsZXNfZXhwbGFpbicpIDogJycpLCAxLCA0MDAp KTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9w cm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+JzsN CgllY2hvICgkc2hvd2ZpbGVzKSA/IHRyKHRkYSgkZmlsZXNlbCkpIDogdHIodGRhKHNtZF9w cm9nbm9zdGljc19nVHh0KCdub19maWxlcycpKSk7DQoJZWNobyB0cih0ZGEoZklucHV0KCdo aWRkZW4nLCAnc21kX3Byb2dub3N0aWNzX3N1cHByZXNzJywgMSkuJGJ0blNhdmUsICRidG5T dHlsZSkpOw0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8g LS0tLS0tLS0tLSBTZXR1cCAvIHByZWZzDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2V0 dXAoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgJHByZWZzOw0KDQoJJG9yaWdsb2MgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUyku RFMsIDEpOw0KCSRvcmlnZXhjID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19leGNsdWRp cicsICdpbWFnZXMsIGZpbGVzLCB0bXAnLCAxKTsNCgkkb3JpZ2RpciA9IHJ0cmltKGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfZGlyJywgcmVhbHBhdGgodHhwYXRoKSwgMSksIERTKTsN Cgkkb3JpZ3BmeCA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJycsIDEp Ow0KDQoJJHByZWZsaXN0ID0gYXJyYXkoDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJl cScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywNCgkJJ3NtZF9wcm9nbm9zdGlj c19hbGFybV9mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsDQoJCSdz bWRfcHJvZ25vc3RpY3NfbWFpbHRvJywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3Np JywNCgkJJ3NtZF9wcm9nbm9zdGljc191c2VycycsDQoJCSdzbWRfcHJvZ25vc3RpY3NfZGly JywNCgkJJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgnLA0KCQknc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MnLA0KCQknc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJywNCgkJJ3NtZF9wcm9nbm9z dGljc19pZ25vcmVzJywNCgkJJ3NtZF9wcm9nbm9zdGljc190eHBkaXInLA0KCSk7DQoJJHdh cm5sb2MgPSAnJzsNCgkkbm90aWZ5ID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3Zp YScpOw0KCSRjaGZvciA9IGdwcygnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicpOw0KCSRy ZXFzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnKTsNCgkkc3FsaW4gPSBn cHMoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0Jyk7DQoJJHR3ZWVuID0gZ3BzKCdzbWRf cHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbicpOw0KCSRydGZvciA9IGdwcygnc21kX3Byb2du b3N0aWNzX3J0X2ZvcmVuc2ljcycpOw0KDQoJLy8gT25seSBvbmUgb2YgdGhlc2UgdmFsaWQg c3RhdHVzIGNvZGVzIGlzIGFsbG93ZWQgdG8gYmUgdGhyb3duDQoJJHRocm93X2NvZGVzID0g YXJyYXkoDQoJCSdzbWRfbm8nID0+IGdUeHQoJ25vJyksDQoJCSdzbWRfYmxvY2snID0+IHNt ZF9wcm9nbm9zdGljc19nVHh0KCdibG9jaycpLA0KCQknMjAwJyA9PiAnMjAwIE9LJywNCgkJ JzMwMScgPT4gJzMwMSBNb3ZlZCBQZXJtYW5lbnRseScsDQoJCSczMDInID0+ICczMDIgRm91 bmQnLA0KCQknMzA3JyA9PiAnMzA3IFRlbXBvcmFyeSBSZWRpcmVjdCcsDQoJCSc0MDEnID0+ ICc0MDEgVW5hdXRob3JpemVkJywNCgkJJzQwMycgPT4gJzQwMyBGb3JiaWRkZW4nLA0KCQkn NDA0JyA9PiAnNDA0IE5vdCBGb3VuZCcsDQoJCSc0MTAnID0+ICc0MTAgR29uZScsDQoJCSc0 MTQnID0+ICc0MTQgUmVxdWVzdC1VUkkgVG9vIExvbmcnLA0KCQknNTAwJyA9PiAnNTAwIElu dGVybmFsIFNlcnZlciBFcnJvcicsDQoJCSc1MDEnID0+ICc1MDEgTm90IEltcGxlbWVudGVk JywNCgkpOw0KDQoJaWYgKCFpbl9hcnJheSgkdGhyb3dbMF0sICR0aHJvd19jb2RlcykgKSB7 DQoJCSR0aHJvd1swXSA9ICc0MDAnOw0KCX0NCg0KCWZvcmVhY2ggKCR0d2VlbiBhcyAkaWR4 ID0+ICR2YWwpIHsNCgkJaWYgKGVtcHR5KCR2YWwpKSB7DQoJCQkkdHdlZW5bJGlkeF0gPSAo JGlkeD09MCkgPyAnMDA6MDAnIDogJzIzOjU5JzsNCgkJfSBlbHNlIHsNCgkJCSR0aW1lcGFy dHMgPSBkb19saXN0KCR2YWwsICc6Jyk7DQoJCQlmb3JlYWNoICgkdGltZXBhcnRzIGFzICRu dW0pIHsNCgkJCQlpZiAoIWlzX251bWVyaWMoJG51bSkpIHsNCgkJCQkJJHR3ZWVuWyRpZHhd ID0gKCRpZHg9PTApID8gJzAwOjAwJyA6ICcyMzo1OSc7DQoJCQkJCWJyZWFrOw0KCQkJCX0N CgkJCX0NCgkJfQ0KCX0NCg0KCSRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSA9IGpvaW4o J3wnLCAoKGlzX2FycmF5KCRub3RpZnkpKSA/ICRub3RpZnkgOiBhcnJheSgkbm90aWZ5KSkp Ow0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yID0gam9pbignfCcsICgoaXNfYXJyYXko JGNoZm9yKSkgPyAkY2hmb3IgOiBhcnJheSgkY2hmb3IpKSk7DQoJJHNtZF9wcm9nbm9zdGlj c19yZXFfaGVhZGVycyA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5KCRyZXFzKSkgPyAkcmVxcyA6 IGFycmF5KCRyZXFzKSkpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVjdCA9IGpvaW4o J3wnLCAoKGlzX2FycmF5KCRzcWxpbikpID8gJHNxbGluIDogYXJyYXkoJHNxbGluKSkpOw0K CSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbiA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5 KCR0d2VlbikpID8gJHR3ZWVuIDogYXJyYXkoJHR3ZWVuKSkpOw0KCSRzbWRfcHJvZ25vc3Rp Y3NfcnRfZm9yZW5zaWNzID0gam9pbignfCcsICgoaXNfYXJyYXkoJHJ0Zm9yKSkgPyAkcnRm b3IgOiBhcnJheSgkcnRmb3IpKSk7DQoNCgkvLyBHcmFiIHRoZSBzYXZlZCBwcmVmIHZhbHVl cyBhbmQgdGFjayBvbiB0aGUgYXJyYXkgaXRlbShzKQ0KCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5X21lcmdlKGFycmF5KCdzdWJtaXQnKSwgJHByZWZsaXN0KSkpKTsNCgkkcHJlZmxp c3RbXSA9ICdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSc7DQoJJHByZWZsaXN0W10gPSAn c21kX3Byb2dub3N0aWNzX2NoZWNrX2Zvcic7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2du b3N0aWNzX3JlcV9oZWFkZXJzJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3Nf c3FsX2luamVjdCc7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2Jl dHdlZW4nOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3Mn Ow0KCSRzbWRfcHJvZ25vc3RpY3NfZGlyID0gcnRyaW0oJHNtZF9wcm9nbm9zdGljc19kaXIs IERTKTsNCg0KCWlmICgkc3VibWl0KSB7DQoJCWlmICgoJHNtZF9wcm9nbm9zdGljc19kaXIg IT0gJG9yaWdkaXIpIHx8ICgkc21kX3Byb2dub3N0aWNzX3ByZWZpeCAhPSAkb3JpZ3BmeCkp IHsNCgkJCWlmIChpc19kaXIoJHNtZF9wcm9nbm9zdGljc19kaXIpICYmIGlzX3dyaXRhYmxl KCRzbWRfcHJvZ25vc3RpY3NfZGlyKSkgew0KCQkJCS8vIEV2ZXJ5dGhpbmcgT0sgc28gZG8g bm90aGluZyBmb3Igbm93DQoJCQl9IGVsc2Ugew0KCQkJCS8vIElnbm9yZSBuZXcgZGlyIGFu ZCByZXNldCBpdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUNCgkJCQkkbXNnID0gYXJyYXkoc21k X3Byb2dub3N0aWNzX2dUeHQoJ25vdF93cml0YWJsZScsIGFycmF5KCd7bG9jYXRpb259JyA9 PiAkc21kX3Byb2dub3N0aWNzX2RpcikpLCBFX1dBUk5JTkcpOw0KCQkJCSRzbWRfcHJvZ25v c3RpY3NfZGlyID0gJG9yaWdkaXI7DQoJCQl9DQoNCgkJCS8vIFJvb20gZm9yIG1vcmUgY29u ZmlnIGZpbGVzIGFzIGFuZCB3aGVuIHRoZXkgYXJlIHJlcXVpcmVkDQoJCQkkZmlsZWxpc3Rb XSA9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJCQlmb3JlYWNoICgkZmlsZWxp c3QgYXMgJGZpbGUpIHsNCgkJCQkkZmlsZW5hbWUgPSAkc21kX3Byb2dub3N0aWNzX3ByZWZp eC5sdHJpbShiYXNlbmFtZSgkZmlsZSksICRvcmlncGZ4KTsNCgkJCQlyZW5hbWUoJGZpbGUs IHJ0cmltKCRzbWRfcHJvZ25vc3RpY3NfZGlyLCBEUykuRFMuJGZpbGVuYW1lKTsNCgkJCX0N CgkJfQ0KDQoJCS8vIFdyaXRlIGFsbCB0aGUgcHJlZnMNCgkJZm9yZWFjaCAoJHByZWZsaXN0 IGFzICRwcmVmdmFsKSB7DQoJCQlzZXRfcHJlZihkb1NsYXNoKCRwcmVmdmFsKSwgZG9TbGFz aCgkJHByZWZ2YWwpLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQn KTsNCgkJfQ0KCQlpZiAoICgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgIT0gJG9yaWdsb2Mp IHx8ICgkc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyICE9ICRvcmlnZXhjKSApIHsNCgkJCSRt c2cgPSBhcnJheShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnd2Fybl9sb2MnKSwgRV9XQVJOSU5H KTsNCgkJfQ0KCQlpZiAoISRtc2cpIHsNCgkJCSRtc2cgPSBnVHh0KCdwcmVmZXJlbmNlc19z YXZlZCcpOw0KCQl9DQoJfQ0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21k X3Byb2dub3N0aWNzJyksICRtc2cpOw0KDQoJJHNtZF9wcm9nbm9zdGljc19kaXIgPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCwgMSk7DQoJJHNtZF9wcm9nbm9z dGljc19wcmVmaXggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsICcnLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yJywgJ2RlbGV0ZXxtb2RpZnknLCAxKTsNCgkkc21kX3Byb2dub3N0 aWNzX2NoZWNrX3doZXJlID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVy ZScsICdhZG1pbicsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcSA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScsIDEwLCAxKTsNCgkkc21kX3Byb2du b3N0aWNzX2NoZWNrX2JldHdlZW4gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNr X2JldHdlZW4nLCAnMDA6MDB8MjM6NTknLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNr X3F0eSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywgJzMwJywgMSk7 DQoJJHNtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9z dGljc19hbGFybV9mcmVxJywgODY0MDAsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5 X3ZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScsICcnLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX21haWx0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bWFpbHRvJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaSA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnLCAxKTsNCgkkc21kX3Byb2du b3N0aWNzX3VzZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc191c2VycycsICcnLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0KCSRz bWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2V4 Y2x1ZGlyJywgJ2ltYWdlcywgZmlsZXMsIHRtcCcsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nf aWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICdlcnJvcl9s b2cnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycycsICdUUkFDRXxQVVR8REVMRVRFJywgMSk7DQoJ JHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19zcWxfaW5qZWN0JywgJzB8JywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcycsICcxfDEnLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX3R4cGRpciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfdHhwZGlyJywgaHUuc21kX3Byb2dub3N0aWNzX2d1ZXNzX2FkbWluX2RpcigpLCAxKTsN Cg0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkkYWRkcyA9IChz dHJwb3MoJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IsICdhZGQnKSAhPT0gZmFsc2UpOw0K CSRkZWxzID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciwgJ2RlbGV0ZScp ICE9PSBmYWxzZSk7DQoJJG1vZHMgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tf Zm9yLCAnbW9kaWZ5JykgIT09IGZhbHNlKTsNCgkkcmhfdHJhY2UgPSAoc3RycG9zKCRzbWRf cHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdUUkFDRScpICE9PSBmYWxzZSk7DQoJJHJoX3B1 dCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycywgJ1BVVCcpICE9PSBm YWxzZSk7DQoJJHJoX2RlbCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVy cywgJ0RFTEVURScpICE9PSBmYWxzZSk7DQoJJHJ0X2hkciA9IChzdHJwb3MoJHNtZF9wcm9n bm9zdGljc19ydF9mb3JlbnNpY3MsICdoZHInKSAhPT0gZmFsc2UpOw0KCSRydF9zcWwgPSAo c3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzLCAnc3FsJykgIT09IGZhbHNl KTsNCgkkdHdlZW5zID0gZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW4s ICd8Jyk7DQoJJHRocm93cyA9IGRvX2xpc3QoJHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0 LCAnfCcpOw0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAm bmFtZT0kc21kX3Byb2dub3N0aWNzX2V2ZW50I3NtZF9zZXR1cCI7DQoNCgllY2hvICRidG5D U1Muc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAnc21kX3Byb2dub3N0aWNzX3NldHVwJyk7DQoJ ZWNobyB0cih0ZGNzKHN0cm9uZyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3NldHVwJykp LnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdoZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9 PiAkaGVscExpbmspKSwgMikgLiB0ZGEoJGJ0bkZpbGVzLiRidG5BY2suJGJ0bkFkdmljZSwg JGJ0blN0eWxlKSApOw0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZl bnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNz X3NldHVwIj4nOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0 bF9tb25vcHRzJyksIDMpICwyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCdjaGVja193aGVyZScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShy YWRpb1NldCgNCgkJCWFycmF5KA0KCQkJCSdhZG1pbicgPT4gZ1R4dCgnbm8nKSwNCgkJCQkn YWRtaW58cHVibGljJyA9PiBnVHh0KCd5ZXMnKQ0KCQkJKSwgJ3NtZF9wcm9nbm9zdGljc19j aGVja193aGVyZScsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUpLCAnIGlkPSJzbWRf cHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUiJykNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZnJlcScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJyku DQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAk c21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEsICcnLCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25v c3RpY3NfZ1R4dCgnc2Vjb25kcycpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9n bm9zdGljc19nVHh0KCdjaGVja19iZXR3ZWVuJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4N CgkJdGRhKA0KCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3 ZWVuW10nLCAkdHdlZW5zWzBdLCAnJywnJywnJywxNSkuDQoJCQlzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnYW5kJykuDQoJCQlmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2NoZWNr X2JldHdlZW5bXScsICR0d2VlbnNbMV0sICcnLCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnaG1zJykNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9z dGljc19nVHh0KCdjaGVja19xdHknKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEo ZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHknLCAkc21kX3Byb2du b3N0aWNzX2NoZWNrX3F0eSwgJycsJycsJycsMTUpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRh KHNtZF9wcm9nbm9zdGljc19nVHh0KCdhbGFybV9mcmVxJyksICcgY2xhc3M9InNtZF9sYWJl bCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJl cScsICRzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcSwgJycsJycsJycsMTUpLnNwLnNtZF9w cm9nbm9zdGljc19nVHh0KCdzZWNvbmRzJykpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21k X3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV92aWEnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicp Lg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWFbXScs ICd0eHAnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhLCAndHhwJykgIT09 IGZhbHNlKSAuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV90 eHAnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlf dmlhW10nLCAnZW1haWwnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhLCAn ZW1haWwnKSAhPT0gZmFsc2UpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0 KCdub3RpZnlfZW1haWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRk YShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbWFpbHRvJyksICcgY2xhc3M9InNtZF9sYWJlbCIn KS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJHNt ZF9wcm9nbm9zdGljc19tYWlsdG8sICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dU eHQoJ21haWx0b19jc2knKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0 KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJHNtZF9wcm9nbm9zdGlj c19tYWlsdG9fY3NpLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Nz dicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhlZChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRs X3JlYWxvcHRzJyksIDMpLCAyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCdyZXFfaGVhZGVycycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgN CgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdUUkFDRScs ICRyaF90cmFjZSkuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX3Ry YWNlJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hl YWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncmhfcHV0JykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25v c3RpY3NfcmVxX2hlYWRlcnNbXScsICdERUxFVEUnLCAkcmhfZGVsKS4NCgkJCSc8bGFiZWw+ Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfZGVsJykuJzwvbGFiZWw+Jw0KCQkpDQoJKTsN CgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NxbF9pbmplY3QnKSwg JyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQlzZWxlY3RJbnB1dCgnc21kX3By b2dub3N0aWNzX3NxbF9pbmplY3RbXScsICR0aHJvd19jb2RlcywgJHRocm93c1swXSwgMCku DQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnd2l0aCcpLg0KCQkJZklucHV0KCd0ZXh0Jywg J3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0W10nLCAkdGhyb3dzWzFdLCAnJywnJywnJyw2 MCkNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdz ZW5kX2ZvcmVuc2ljcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWNo ZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzW10nLCAnaGRyJywgJHJ0X2hk cikuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3J0X2hkcicpLic8L2xh YmVsPicuDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljc1tdJywg J3NxbCcsICRydF9zcWwpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdy dF9zcWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3By b2dub3N0aWNzX2dUeHQoJ3R0bF9maWxlb3B0cycpLCAzKSwgMikpOw0KCWVjaG8gdHIoDQoJ CXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZm9yJyksICcgY2xhc3M9InNtZF9s YWJlbCInKS4NCgkJdGRhKA0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3JbXScsICdhZGQnLCAkYWRkcykgLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19n VHh0KCdjaF9hZGQnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGlj c19jaGVja19mb3JbXScsICdkZWxldGUnLCAkZGVscykuDQoJCQknPGxhYmVsPicuc21kX3By b2dub3N0aWNzX2dUeHQoJ2NoX2RlbCcpLic8L2xhYmVsPicuDQoJCQljaGVja2JveCgnc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZvcltdJywgJ21vZGlmeScsICRtb2RzKS4NCgkJCSc8bGFi ZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hfbW9kJykuJzwvbGFiZWw+Jw0KCQkpDQoJ KTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xpc3Rsb2MnKSwg JyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9n bm9zdGljc19saXN0bG9jJywgJHNtZF9wcm9nbm9zdGljc19saXN0bG9jLCAnJywnJywnJyw2 MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cigNCgkJ dGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdleGNsdWRpcicpLCAnIGNsYXNzPSJzbWRfbGFi ZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGly JywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJycsJycsJycsNjApLnNwLnNtZF9wcm9n bm9zdGljc19nVHh0KCdjc3YnKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25v c3RpY3NfZ1R4dCgnaWdub3JlcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShm SW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2lnbm9yZXMnLCAkc21kX3Byb2dub3N0 aWNzX2lnbm9yZXMsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2 JykpDQoJKTsNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxf cGx1Z29wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNz X2dUeHQoJ2F1dGhfdXNlcnMnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklu cHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc191c2VycycsICRzbWRfcHJvZ25vc3RpY3Nf dXNlcnMsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJ KTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R4cGRpcicpLCAn IGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2du b3N0aWNzX3R4cGRpcicsICRzbWRfcHJvZ25vc3RpY3NfdHhwZGlyLCAnJywnJywnJyw2MCkp DQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Byb2dsb2Mn KSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9w cm9nbm9zdGljc19kaXInLCAkc21kX3Byb2dub3N0aWNzX2RpciwgJycsJycsJycsNjApKQ0K CSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdwcm9ncGZ4Jyks ICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJv Z25vc3RpY3NfcHJlZml4JywgJHNtZF9wcm9nbm9zdGljc19wcmVmaXgsICcnLCcnLCcnLDYw KSkNCgkpOw0KCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgllY2hvICc8 L2Zvcm0+JzsNCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0gIFNlY3Vy aXR5IGFkdmljZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2FkdmljZSgkbXNnPScnKSB7 DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3Nfc3R5 bGUsICRwcmVmczsNCglyZXF1aXJlX29uY2UgdHhwYXRoLicvbGliL0lYUkNsYXNzLnBocCc7 DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwg JG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRjaGVj a3MgPSBhcnJheSgpOw0KDQoJLy8gUHJvZ25vc3RpY3MgZGlyIGluIGRvY3Jvb3Q/DQoJaWYg KHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCksICRwcmVm c1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJv Z25vc3RpY3NfZ1R4dCgnZG9jcm9vdF9wcm9nbm9zdGljcycpOw0KCX0NCg0KCS8vIFNldHVw IHN0aWxsIGV4aXN0cz8NCglpZiAoQGlzX2Rpcih0eHBhdGggLiBEUy4gJ3NldHVwJykpIHsN CgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NldHVwX2V4aXN0cycpOw0K CX0NCg0KCS8vIFJQQyBzdGlsbCBleGlzdHM/DQoJaWYgKEBpc19kaXIocmVhbHBhdGgodHhw YXRoLkRTLicuLicuRFMuICdycGMnKSkgJiYgJHByZWZzWydlbmFibGVfeG1scnBjX3NlcnZl ciddID09IDApIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3JwY19l eGlzdHMnKTsNCgl9DQoNCgkvLyBOZXcgVFhQIHZlcnNpb24vYnJhbmNoIGF2YWlsYWJsZT8g QWRhcHRlZCBmcm9tIHR4cGxpYl91cGRhdGUucGhwDQoJJGNsaWVudCA9IG5ldyBJWFJfQ2xp ZW50KCdodHRwOi8vcnBjLnRleHRwYXR0ZXJuLmNvbScpOw0KCSR1aWQgPSBnZXRfcHJlZign YmxvZ191aWQnLCBtZDUodW5pcWlkKG10X3JhbmQoKSx0cnVlKSkpOw0KCWlmICgkY2xpZW50 LT5xdWVyeSgndHVwcy5nZXRUWFBWZXJzaW9uJywkdWlkKSkgew0KCQkkcmVzcG9uc2UgPSAk Y2xpZW50LT5nZXRSZXNwb25zZSgpOw0KDQoJCWlmIChpc19hcnJheSgkcmVzcG9uc2UpKSB7 DQoJCQlrc29ydCgkcmVzcG9uc2UpOw0KCQkJJHZlcnNpb24gPSBnZXRfcHJlZigndmVyc2lv bicsICcnKTsNCgkJCSRsdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2ZXJzaW9uKTsNCgkJCSRi cmFuY2ggPSBzdWJzdHIoJHZlcnNpb24sMCwzKTsNCg0KCQkJZm9yZWFjaCAoJHJlc3BvbnNl IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRydmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2YWwp Ow0KCQkJCWlmICgka2V5ID09ICd0eHBfY3VycmVudF92ZXJzaW9uXycuJGJyYW5jaCkgew0K CQkJCQlpZiAoaXNzZXQoJGx2ZXJzaW9uWzJdKSAmJiBpc3NldCgkcnZlcnNpb25bMl0pICYm IChpbnR2YWwoJHJ2ZXJzaW9uWzJdKT5pbnR2YWwoJGx2ZXJzaW9uWzJdKSkpIHsNCgkJCQkJ CSRtb3N0X3JlY2VudCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdmFpbF9icmFuY2gnKS4n OiAnLiR2YWw7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQlpZiAoaW50dmFsKCRydmVy c2lvblswXSk+aW50dmFsKCRsdmVyc2lvblswXSkgfHwgaW50dmFsKCRydmVyc2lvblsxXSk+ aW50dmFsKCRsdmVyc2lvblsxXSkpIHsNCgkJCQkJCSRtb3N0X3JlY2VudCA9IHNtZF9wcm9n bm9zdGljc19nVHh0KCdhdmFpbF90eHAnKS4nOiAnLiR2YWw7DQoJCQkJCX0NCgkJCQl9DQoJ CQl9DQoJCQlpZiAoaXNzZXQoJG1vc3RfcmVjZW50KSkgew0KCQkJCSRjaGVja3NbXSA9ICRt b3N0X3JlY2VudDsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIEZpbGVzIGRpciBpbiBkb2Nyb290 Pw0KCWlmIChzdHJwb3MoJHByZWZzWydmaWxlX2Jhc2VfcGF0aCddLCAkcHJlZnNbJ3BhdGhf dG9fc2l0ZSddKSAhPT0gZmFsc2UpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNz X2dUeHQoJ2RvY3Jvb3RfZmlsZXMnKTsNCgl9DQoNCgkvLyBUbXAgZGlyIGluIGRvY3Jvb3Q/ DQoJaWYgKHN0cnBvcygkcHJlZnNbJ3RlbXBkaXInXSwgJHByZWZzWydwYXRoX3RvX3NpdGUn XSkgIT09IGZhbHNlKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdk b2Nyb290X3RtcCcpOw0KCX0NCg0KLyoNCgkvLyBUT0RPOiBjaGVjayB3aGF0IFNIT1cgR1JB TlRTIHJldHVybnMgYW5kIGRldGVybWluZSBpZiBpdCBjb3VsZCBiZSBhIHNlY3VyaXR5IHJp c2sNCgkkcmVzID0gc2FmZV9xdWVyeSgnU0hPVyBHUkFOVFMnKTsNCglpZiAobnVtUm93cygk cmVzKSA+IDApIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Nob3df Z3JhbnRzJyk7DQoJfQ0KKi8NCg0KCS8vIERvZXMgdGhpcyBNeVNRTCB1c2VyIGhhdmUgRklM RVMgcHJpdnM/DQoJJHJhbmRmaWxlID0gJHByZWZzWyd0ZW1wZGlyJ10uRFMucmFuZCgpLnRp bWUoKS4nLnNxbCc7DQoJJHJlcyA9IEBzYWZlX3F1ZXJ5KCdTRUxFQ1QgaWQgSU5UTyBPVVRG SUxFICInLiRyYW5kZmlsZS4nIiBGSUVMRFMgVEVSTUlOQVRFRCBCWSAiXHQiIExJTkVTIFRF Uk1JTkFURUQgQlkgIlxuIiBGUk9NIHR4cF9pbWFnZSBXSEVSRSAxIExJTUlUIDEnKTsNCglp ZiAobXlzcWxfZXJyb3IoKSA9PSAnJykgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnc3FsX2ZpbGVfcHJpdnMnKTsNCgkJaWYgKGlzX2ZpbGUoJHJhbmRmaWxlKSkg ew0KCQkJQHVubGluaygkcmFuZGZpbGUpOw0KCQl9DQoJfQ0KDQoJZWNobyAnPHN0eWxlIHR5 cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ2FkdmljZSddLiRzbWRf cHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVwJ10uJzwvc3R5bGU+Jy5zdGFydFRhYmxlKCdsaXN0 JywgJycsICdzbWRfcHJvZ19hZHZpY2UnKTsNCgllY2hvIHRyKHRkYShzdHJvbmcoc21kX3By b2dub3N0aWNzX2dUeHQoJ3R0bF9hZHZpY2UnKSkpIC4gdGRhKCRidG5TZXR1cC4kYnRuRmls ZXMuJGJ0bkFjaywgJGJ0blN0eWxlKSApOw0KCWlmICgkY2hlY2tzKSB7DQoJCWZvcmVhY2go JGNoZWNrcyBhcyAkY2hlY2spIHsNCgkJCWVjaG8gdHIodGRhKCRjaGVjaykpOw0KCQl9DQoJ fSBlbHNlIHsNCgkJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3RpZ2h0Jykp KTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIEhhc2ggdGhl IGhhc2hmaWxlDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2VsZl9oYXNoKCkgew0KCWds b2JhbCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0KCWlmIChmaWxlX2V4aXN0cygk c21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJJGNvbnRlbnQgPSBzbWRfcHJvZ25v c3RpY3NfcHJlcF9maWxlKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKTsNCgkJJGhhc2gg PSBtZDUoJGNvbnRlbnQpOw0KCX0gZWxzZSB7DQoJCSRoYXNoID0gTlVMTDsNCgl9DQoJc2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1oYXNoJywgJGhhc2gsICdzbWRfcHJvZ25vcycs IFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tIENvbXBp bGUgbGlzdCBvZiBmaWxlcyB0byBtb25pdG9yDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nf cmVhZGZpbGVzKCkgew0KCSRmaWxlbGlzdCA9IGFycmF5KCk7DQoNCgkkc21kX3Byb2dub3N0 aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCAnJyk7 DQoJJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciA9IGRvX2xpc3QoZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19leGNsdWRpcicsICcnKSk7DQoJJHNtZF9wcm9nbm9zdGljc19pZ25vcmVz ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJycpOw0KCWlmICgkc21k X3Byb2dub3N0aWNzX2xpc3Rsb2MpIHsNCgkJZm9yZWFjaCAoZG9fbGlzdCgkc21kX3Byb2du b3N0aWNzX2xpc3Rsb2MpIGFzICRsb2MpIHsNCgkJCS8vIE5PVEU6IG5vdCB1c2luZyBHTE9C X0JSQUNFIHRvIGdyYWIgcmVndWxhciBhbmQgZG90IGZpbGVzLCBzaW5jZSBpdCdzIG5vdCBh bHdheXMgYXZhaWxhYmxlIGNyb3NzLU9TDQoJCQkkZmlsZWxpc3QgPSBhcnJheV9tZXJnZSgk ZmlsZWxpc3QsIHNtZF9wcm9nbm9zdGljc19yZ2xvYigiKiIsIEdMT0JfTUFSSywgJGxvYywg JHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSwg c21kX3Byb2dub3N0aWNzX3JnbG9iKCIuKiIsIEdMT0JfTUFSSywgJGxvYywgJHNtZF9wcm9n bm9zdGljc19leGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSk7DQoJCX0NCgl9 DQoJcmV0dXJuICRmaWxlbGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQcmVwYXJlIGZpbGUg Y29udGVudHMgZm9yIG1kNS4gQXNzdW1lcyBmaWxlIGV4aXN0cw0KLy8gQ2hlY2tzIHRvIHNl ZSBpZiBsYXJnZSBmaWxlcyBhcmUgYmluYXJ5IGJlZm9yZSB3YXN0aW5nIHRpbWUgc3RyaXBw aW5nIG5ld2xpbmVzIGFuZCBzdHVmZg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3ByZXBf ZmlsZSgkZmlsZSkgew0KCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0K CSRzdGF0ID0gc3RhdCgkZmlsZSk7DQoJJGRvc3RyaXAgPSB0cnVlOw0KCS8vIFBlcmZvcm0g dGhlIHN0cmlwIHJlZ2FyZGxlc3Mgb24gZmlsZXMgPCAxS2IgYXMgaXQgaGFzIGxpdHRsZSBp bXBhY3QNCglpZiAoJHN0YXRbJ3NpemUnXSA+IDEwMjQwMDApIHsNCgkJJHBhcnQgPSBzdWJz dHIoJGNvbnRlbnQsIDAsIDE1MzYwMDApOyAvLyBGaXJzdCAxLjVLQg0KCQlpZiAoc3RycG9z KCRwYXJ0LCAweDAwKSB8fCAoc3RycG9zKCRwYXJ0LCAweDBEKSAhPT0gZmFsc2UpIHx8IChz dHJwb3MoJHBhcnQsIDB4MEEpICE9PSBmYWxzZSkpIHsNCgkJCS8vIExpa2VseSBhIGJpbmFy eSBmaWxlOiBsZWF2ZSBpdCBiZQ0KCQkJJGRvc3RyaXAgPSBmYWxzZTsNCgkJfQ0KCX0NCglp ZiAoJGRvc3RyaXApIHsNCgkJJGNvbnRlbnQgPSBzdHJ0ciggJGNvbnRlbnQsIGFycmF5KCJc clxuIiA9PiAiXG4iLCAiXCRIZWFkVVJMOiBodHRwOiIgPT4gIlwkSGVhZFVSTDogaHR0cHM6 IikgKTsNCgl9DQoJcmV0dXJuICRjb250ZW50Ow0KfQ0KDQovLyBGcmFua2Vuc3RlaW5lZCBm cm9tIGh0dHA6Ly9zbmlwcGxyLmNvbS92aWV3LzE2MjMzL3JlY3Vyc2l2ZS1nbG9iLw0KZnVu Y3Rpb24gc21kX3Byb2dub3N0aWNzX3JnbG9iKCRwYXR0ZXJuLCAkZmxhZ3M9MCwgJHBhdGg9 JycsICRleGNsPWFycmF5KCksICRpZ249JycpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGlj c19jaGVja3N1bXM7DQoNCgkvLyBBZGQgYW55IGZpbGVzIHRvIHBlcm1hbmVudGx5IGV4Y2x1 ZGUgaGVyZSAoTk9UIGRpcnM6IHRoZXkncmUgaWdub3JlZCBhdXRvbWF0aWNhbGx5KQ0KCSRp Z25hcnIgPSAoJGlnbikgPyBkb19saXN0KCRpZ24pIDogYXJyYXkoKTsNCg0KCS8vIEV4cGFu ZCBhbnkgd2lsZGNhcmQgZmlsZW5hbWVzDQoJJHJlZ2FyciA9IGFycmF5KCk7DQoJZm9yZWFj aCAoJGlnbmFyciBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCWlmICggKHN0cnBvcygkaXRlbSwg JyonKSAhPT0gZmFsc2UpIHx8IChzdHJwb3MoJGl0ZW0sICc/JykgIT09IGZhbHNlKSApIHsN CgkJCSRyZWdhcnJbXSA9IHN0cnRyKCBwcmVnX3F1b3RlKCRpdGVtKSwgYXJyYXkoIlwqIiA9 PiAiLioiLCAiXD8iID0+ICIuIikgKTsNCgkJCXVuc2V0KCRpZ25hcnJbJGlkeF0pOyAvLyBS ZW1vdmUgdGhlIHdpbGRjYXJkIGZpbGVuYW1lIGZyb20gdGhlIGlnbm9yZSBsaXN0DQoJCX0N Cgl9DQoJJHJlZ2V4Y2x1ZGUgPSAoJHJlZ2FycikgPyAnL14oJyAuIGpvaW4oJ3wnLCAkcmVn YXJyKSAuICcpJC8nIDogJyc7DQoJJHBlcm1leGNsdWRlID0gYXJyYXlfbWVyZ2UoYXJyYXko YmFzZW5hbWUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSwgJGlnbmFycik7DQoNCglp ZiAoISRwYXRoICYmICgkZGlyID0gZGlybmFtZSgkcGF0dGVybikpICE9ICcuJykgew0KCQlp ZiAoJGRpciA9PSAnXFwnIHx8ICRkaXIgPT0gRFMpICRkaXIgPSAnJzsNCgkJcmV0dXJuIHNt ZF9wcm9nbm9zdGljc19yZ2xvYihiYXNlbmFtZSgkcGF0dGVybiksICRmbGFncywgJGRpciAu IERTLCAkZXhjbCwgJGlnbik7DQoJfQ0KCSRwYXRocyA9IGdsb2IoJHBhdGggLiAnKicsIEdM T0JfT05MWURJUiB8IEdMT0JfTk9TT1JUKTsNCgkkZmlsZXMgPSBnbG9iKCRwYXRoIC4gJHBh dHRlcm4sICRmbGFncyk7DQoJZm9yZWFjaCAoJHBhdGhzIGFzICRwKSB7DQoJCSRwaW5mbyA9 IGFycmF5X3BvcChleHBsb2RlKERTLCAkcCkpOw0KCQlpZiAoIWluX2FycmF5KCRwaW5mbywg JGV4Y2wpKSB7DQoJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsIHNtZF9wcm9nbm9z dGljc19yZ2xvYigkcGF0dGVybiwgJGZsYWdzLCAkcCAuIERTLCAkZXhjbCwgJGlnbikpOw0K CQkJZm9yZWFjaCgkZmlsZXMgYXMgJGlkeCA9PiAkdGhlRmlsZSkgew0KCQkJCSRmZXggPSBh cnJheV9wb3AoZXhwbG9kZShEUywgJHRoZUZpbGUpKTsNCgkJCQkkcmV4ID0gKCRyZWdleGNs dWRlKSA/IHByZWdfbWF0Y2goJHJlZ2V4Y2x1ZGUsICRmZXgpIDogZmFsc2U7DQoJCQkJaWYo JGZleD09JycgfHwgaW5fYXJyYXkoJGZleCwgJHBlcm1leGNsdWRlKSB8fCAkcmV4KSB7DQoJ CQkJCXVuc2V0KCRmaWxlc1skaWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVy biAkZmlsZXM7DQp9DQoNCi8vIEZvcm1hdCBmb3JlbnNpYyBkYXRhIGZvciBhIGZpbGUNCmZ1 bmN0aW9uIHNtZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJGZpbGUsICRmaSkgew0K CWdsb2JhbCAkcHJlZnM7DQoNCgkkZGZvcm0gPSAkcHJlZnNbJ2RhdGVmb3JtYXQnXTsNCgkk c2VwID0gbjsNCgkkb3V0ID0gJyc7DQoNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnc3RhdF9uYW1lJykgLiAkZmlsZTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJv Z25vc3RpY3NfZ1R4dCgnc3RhdF9zaXplJykgLiAkZmlbJ3NpemUnXTsNCgkkb3V0IC49ICRz ZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9tb2QnKSAuIHN0cmZ0aW1lKCRkZm9y bSwgJGZpWydtdGltZSddKTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnc3RhdF91aWQnKSAuICRmaVsndWlkJ107DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2du b3N0aWNzX2dUeHQoJ3N0YXRfZ2lkJykgLiAkZmlbJ2dpZCddOw0KDQoJcmV0dXJuICRvdXQ7 DQp9DQoNCi8vIC0tLS0tLS0tLS0gRG9lcyB3aGF0IGl0IHNheXMgb24gdGhlIHRpbg0KLy8g QXNzdW1lcyAndGV4dHBhdHRlcm4nIGlzIHRoZSBhZG1pbi1zaWRlIGRpcmVjdG9yeSBpZiBz ZXJ2ZXIgdmFyIG5vdCBzZXQuIE11c3QgZml4IGluIGNvcmUgb25lIGRheSB3aXRoIHRydWUg Y29uc3RhbnQNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9kaXIoKSB7 DQoJJGFkbWluZGlyID0gdHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSwgJy9c XCcpOw0KCSRhZG1pbmRpciA9IChlbXB0eSgkYWRtaW5kaXIpKSA/ICd0ZXh0cGF0dGVybicg OiAkYWRtaW5kaXI7DQoJcmV0dXJuICRhZG1pbmRpcjsNCn0NCg0KLy8gLS0tLS0tLS0tLSBH ZXQgY29tbW9uIHNlcnZlciBpbmZvIGZvciBtYWlsIGhlYWRlcnMsIGV0Yw0KZnVuY3Rpb24g c21kX3Byb2dub3N0aWNzX2hlYWRlcl9pbmZvKCRmcm9tbmFtZSkgew0KCSRkb21haW5wYXJ0 cyA9IGRvX2xpc3QoZG9TdHJpcChzZXJ2ZXJTZXQoJ1NFUlZFUl9OQU1FJykpLCAnLicpOw0K CSRudW1wYXJ0cyA9IGNvdW50KCRkb21haW5wYXJ0cyk7DQoJJGRvbWFpbiA9ICRkb21haW5w YXJ0c1skbnVtcGFydHMtMl0gLiAnLicgLiAkZG9tYWlucGFydHNbJG51bXBhcnRzLTFdOw0K CSRyZXBseV90byA9ICdub3JlcGx5QCcuJGRvbWFpbjsNCgkkdHhwZGlyID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc190eHBkaXInLCBodS5zbWRfcHJvZ25vc3RpY3NfZ3Vlc3NfYWRt aW5fZGlyKCkpOw0KCSRzZXAgPSBpc193aW5kb3dzKCkgPyAiXHJcbiIgOiAiXG4iOw0KCSRo ZWFkZXJzID0gIkZyb206ICRmcm9tbmFtZSA8JHJlcGx5X3RvPiIuDQoJCSRzZXAuJ1JlcGx5 LVRvOiAnLiRyZXBseV90by4NCgkJJHNlcC4nWC1NYWlsZXI6IFRleHRwYXR0ZXJuJy4NCgkJ JHNlcC4nQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCcuDQoJCSRzZXAuJ0NvbnRl bnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJJHNlcDsNCg0KCSRv dXQgPSBhcnJheSgNCgkJJ2RvbWFpbicgPT4gJGRvbWFpbiwNCgkJJ3JlcGx5X3RvJyA9PiAk cmVwbHlfdG8sDQoJCSd0eHBkaXInID0+ICR0eHBkaXIsDQoJCSdzZXAnID0+ICRzZXAsDQoJ CSdoZWFkZXJzJyA9PiAkaGVhZGVycywNCgkpOw0KDQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8v IENvbW1vbiBidXR0b25zDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpIHsN CglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19zdHls ZTsNCg0KCSRyZXQgPSBhcnJheSAoDQoJCSdidG5TYXZlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcs ICdzdWJtaXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyksDQoJCSdidG5BY2snID0+ICc8 Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19l dmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hY2smIzM4O3NtZF9wcm9nbm9zdGlj c19zdXBwcmVzcz0xIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9z dGljc19nVHh0KCdwbmxfYWNrJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRu QWNrSXQnID0+IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19n VHh0KCdwbmxfYWNraXQnKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bklnbm9yZScgPT4gZklucHV0 KCdzdWJtaXQnLCAnaWdub3JlJywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9pZ25vcmUn KSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bkNTSScgPT4gZklucHV0KCdzdWJtaXQnLCAnY3NpJywg c21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9jc2knKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bkFk dmljZScgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3By b2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FkdmljZSI+Jy5m SW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2Fk dmljZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0bkZpbGVzJyA9PiAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZl bnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfZmlsZXMiPicuZklucHV0KCdzdWJtaXQn LCAnc3VibWl0Jywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9maWxlcycpLCAnc21hbGxl cmJveCcpLic8L2Zvcm0+JywNCgkJJ2J0blNldHVwJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0 IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1z bWRfcHJvZ25vc3RpY3Nfc2V0dXAiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21k X3Byb2dub3N0aWNzX2dUeHQoJ3BubF9zZXR1cCcpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+ JywNCgkJJ2J0blN0eWxlJyA9PiAnIGNsYXNzPSJzbWRfcHJvZ19idG5zIiBzdHlsZT0iYm9y ZGVyOjA7aGVpZ2h0OjI1cHg7IicsDQoJCSdidG5DU1MnID0+ICc8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPicuJHNtZF9wcm9nbm9zdGljc19zdHlsZVsnc2V0dXAnXS4nPC9zdHlsZT4nLA0K CSk7DQoJcmV0dXJuICRyZXQ7DQp9DQoNCi8vIE11bHRpLWZpbGUgZHJvcGRvd24gc2VsZWN0 aW9uDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfbXVsdGlzZWwoJHNlbG5hbWU9JycsICR0 cmVlPWFycmF5KCksICRzZWw9YXJyYXkoKSkgew0KCSRvdXRbXSA9ICc8c2VsZWN0IGlkPSIn LiRzZWxuYW1lLiciIG5hbWU9IicuJHNlbG5hbWUuJ1tdIiBjbGFzcz0ibGlzdCIgc3R5bGU9 ImhlaWdodDo0MDBweDsiIG11bHRpcGxlPSJtdWx0aXBsZSI+JzsNCglmb3JlYWNoICgkdHJl ZSBhcyAkbGVhZikgew0KCQkkc2VsZWN0ZWQ9Jyc7DQoJCWlmIChpbl9hcnJheSgkbGVhZiwg JHNlbCkpIHsNCgkJCSRzZWxlY3RlZCA9ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7DQoJCX0N Cg0KCQkkb3V0W10gPSB0Lic8b3B0aW9uJy4kc2VsZWN0ZWQuJz4nLmh0bWxzcGVjaWFsY2hh cnMoJGxlYWYpLic8L29wdGlvbj4nLm47DQoJfQ0KCSRvdXRbXSA9ICc8L3NlbGVjdD4nOw0K CXJldHVybiBqb2luKCcnLCRvdXQpOw0KfQ0KDQovLyBQYXNzd29yZCBzdHJlbmd0aCBtZXRl cg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2Nocm9ub3N0cmVuZ3RoKCRldnQsICRzdHAp IHsNCglnbG9iYWwgJGV2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlOw0KDQoJZWNobyA8 PDxFT1MNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+eyRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVb J21ldGVyJ119PC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8v PCFbQ0RBVEFbDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogICBGcmFua2Vuc3RlaW5lZCBmcm9tIGFu IG9yaWdpbmFsIChHUEwpIHNjcmlwdA0KKiogICBieSBTbWFsbCBIYWRyb24gQ29sbGlkZXIg LS0gVGhhbmtzIQ0KKiogICBodHRwOi8vd3d3LnNtYWxsaGFkcm9uY29sbGlkZXIuY29tDQoq Kg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2dUeHQod2hhdCkgew0K CXZhciBsYW5nID0gbmV3IEFycmF5KCk7DQoJbGFuZ1snYWJvdXQnXSA9ICdhYm91dCAnOw0K CWxhbmdbJ2RpZ2l0c2VwJ10gPSAnLCc7DQoJbGFuZ1sncGx1cmFsJ10gPSAncyc7DQoJbGFu Z1sncHdfY29tbW9uJ10gPSAnb25lIG9mIHRoZSA1MDAgbW9zdCBjb21tb24gcGFzc3dvcmRz JzsNCglsYW5nWydwd19wb3N0YW1ibGUnXSA9ICdJdCB3b3VsZCBiZSBjcmFja2VkIGFsbW9z dCBpbnN0YW50bHknOw0KCWxhbmdbJ3B3X3ByZWFtYmxlJ10gPSAnWW91ciBwYXNzd29yZCBp cyc7DQoJbGFuZ1sncHdfdGFrZSddID0gJ0l0IHdvdWxkIHRha2UnOw0KCWxhbmdbJ3B3X2Ny YWNrJ10gPSAnZm9yIGEgZGVza3RvcCBQQyB0byBjcmFjayB5b3VyIHBhc3MgYnkgYnJ1dGUg Zm9yY2U8YnIgLz4odW5sZXNzIHlvdSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v YmxvZy9jaG9vc2luZy1hLWJyaWxsaWFudC1wYXNzd29yZC8iPmJyb2tlIHRoZSBydWxlczwv YT4sIGluIHdoaWNoIGNhc2UgaXRcJ2QgYmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5KSc7 DQoJbGFuZ1snc2VjcyddID0gJyBzZWNvbmRzJzsNCglsYW5nWyd0X3NlYyddID0gJ3NlY29u ZCc7DQoJbGFuZ1sndF9taW4nXSA9ICdtaW51dGUnOw0KCWxhbmdbJ3RfaHInXSA9ICdob3Vy JzsNCglsYW5nWyd0X2RheSddID0gJ2RheSc7DQoJbGFuZ1sndF95ciddID0gJ3llYXInOw0K CWxhbmdbJ3RfdGhvX3knXSA9ICd0aG91c2FuZCB5ZWFycyc7DQoJbGFuZ1sndF9taWxfeSdd ID0gJ21pbGxpb24geWVhcnMnOw0KCWxhbmdbJ3RfYmlsX3knXSA9ICdiaWxsaW9uIHllYXJz JzsNCglsYW5nWyd0X3RyaV95J10gPSAndHJsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9xdWFf eSddID0gJ3F1YWRyaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3F1aV95J10gPSAncXVpbnRp bGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfc2V4X3knXSA9ICdzZXh0aWxsaW9uIHllYXJzJzsN CglsYW5nWyd0X3NlcF95J10gPSAnc2VwdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9vY3Rf eSddID0gJ29jdGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9ub25feSddID0gJ25vbmlsbGlv biB5ZWFycyc7DQoJcmV0dXJuIGxhbmdbd2hhdF07DQp9DQoNCmZ1bmN0aW9uIHNtZF9wcm9n X2Nocm9ub1N0cmVuZ3RoKHB3KSB7DQoJdmFyIHNpemUgPSBwdy5sZW5ndGg7DQoJdmFyIHNt ZF9wcm9nX2NvbW1vbl9wdyA9IG5ldyBBcnJheSgpOw0KCXZhciBwcmVjaXNpb24gPSA3Ow0K CXNtZF9wcm9nX2NvbW1vbl9wd1szXSA9IFsnZ29kJywnc2V4J107DQoJc21kX3Byb2dfY29t bW9uX3B3WzRdID0gWycxMjM0JywnY29vbCcsJzEzMTMnLCdzdGFyJywnZ29sZicsJ2JlYXIn LCdkYXZlJywncGFzcycsJ2FhYWEnLCc2OTY5JywnamFrZScsJ21hdHQnLCcxMjEyJywnZmlz aCcsJ2Z1Y2snLCdwb3JuJywnNDMyMScsJzIwMDAnLCc0MTI4JywndGVzdCcsJ3NoaXQnLCds b3ZlJywnYmFieScsJ2N1bnQnLCdtYXJrJywnMzMzMycsJ2pvaG4nLCdzZXh5JywnNTE1MCcs JzQ0NDQnLCcyMTEyJywnZnJlZCcsJ21pa2UnLCcxMTExJywndGl0cycsJ3BhdWwnLCdtaW5l Jywna2luZycsJ2ZpcmUnLCc1NTU1Jywnc2x1dCcsJ2dpcmwnLCcyMjIyJywnYXNkZicsJ3Rp bWUnLCc3Nzc3Jywncm9jaycsJ3h4eHgnLCdmb3JkJywnZGljaycsJ2JpbGwnLCd3b2xmJywn Ymx1ZScsJ2FsZXgnLCdjb2NrJywnYmVlcicsJ2VyaWMnLCc2NjY2JywnamFjayddOw0KCXNt ZF9wcm9nX2NvbW1vbl9wd1s1XSA9IFsnYmVhY2gnLCdncmVhdCcsJ2JsYWNrJywncHVzc3kn LCcxMjM0NScsJ2ZyYW5rJywndGlnZXInLCdqYXBhbicsJ21vbmV5JywnbmFrZWQnLCcxMTEx MScsJ2FuZ2VsJywnc3RhcnMnLCdhcHBsZScsJ3Bvcm5vJywnc3RldmUnLCd2aXBlcicsJ2hv cm55Jywnb3U4MTInLCdrZXZpbicsJ2J1ZGR5JywndGVlbnMnLCd5b3VuZycsJ2phc29uJywn bHVja3knLCdnaXJscycsJ2xvdmVyJywnYnJpYW4nLCdraXR0eScsJ2J1YmJhJywnaGFwcHkn LCdjcmVhbScsJ2phbWVzJywneHh4eHgnLCdib290eScsJ2tlbGx5JywnYm9vYnMnLCdwZW5p cycsJ2VhZ2xlJywnd2hpdGUnLCdlbnRlcicsJ2NoZXZ5Jywnc21pdGgnLCdjaHJpcycsJ2dy ZWVuJywnc2FtbXknLCdzdXBlcicsJ21hZ2ljJywncG93ZXInLCdlbmpveScsJ3Njb3R0Jywn ZGF2aWQnLCd2aWRlbycsJ3F3ZXJ0JywncGFyaXMnLCd3b21lbicsJ2p1aWNlJywnZGlydHkn LCdtdXNpYycsJ3BldGVyJywnYml0Y2gnLCdob3VzZScsJ2hlbGxvJywnYmlsbHknLCdtb3Zp ZSddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s2XSA9IFsnMTIzNDU2JywncHJpbmNlJywnZ3Vp dGFyJywnYnV0dGVyJywnamFndWFyJywndW5pdGVkJywndHVydGxlJywnbXVmZmluJywnY29v cGVyJywnbmFzY2FyJywncmVkc294JywnZHJhZ29uJywnenhjdmJuJywncXdlcnR5JywndG9t Y2F0JywnNjk2OTY5JywnNjU0MzIxJywnbXVycGh5JywnOTg3NjU0JywnYW1hbmRhJywnYnJh emlsJywnd2l6YXJkJywnaGFubmFoJywnbGF1cmVuJywnbWFzdGVyJywnZG9jdG9yJywnZWFn bGUxJywnZ2F0b3JzJywnc3F1aXJ0Jywnc2hhZG93JywnbWlja2V5JywnbW90aGVyJywnbW9u a2V5JywnYmFpbGV5JywnanVuaW9yJywnbmF0aGFuJywnYWJjMTIzJywna25pZ2h0JywnYWxl eGlzJywnaWNlbWFuJywnZnVja21lJywndGlnZXJzJywnYmFkYm95JywnYm9ubmllJywncHVy cGxlJywnZGViYmllJywnYW5nZWxhJywnam9yZGFuJywnYW5kcmVhJywnc3BpZGVyJywnaGFy bGV5JywncmFuZ2VyJywnZGFrb3RhJywnYm9vZ2VyJywnaXdhbnR1JywnYWFhYWFhJywnbG92 ZXJzJywncGxheWVyJywnZmx5ZXJzJywnc3Vja2l0JywnaHVudGVyJywnYmVhdmVyJywnbW9y Z2FuJywnbWF0cml4JywnYm9vbWVyJywncnVubmVyJywnYmF0bWFuJywnc2Nvb2J5JywnZWR3 YXJkJywndGhvbWFzJywnd2FsdGVyJywnaGVscG1lJywnZ29yZG9uJywndGlnZ2VyJywnamFj a2llJywnY2FzcGVyJywncm9iZXJ0JywnYm9vYm9vJywnYm9zdG9uJywnbW9uaWNhJywnc3R1 cGlkJywnYWNjZXNzJywnY29mZmVlJywnYnJhdmVzJywneHh4eHh4JywneWFua2VlJywnc2F0 dXJuJywnYnVzdGVyJywnZ2VtaW5pJywnYmFybmV5JywnYXBwbGVzJywnc29jY2VyJywncmFi Yml0JywndmljdG9yJywnYXVndXN0JywnaG9ja2V5JywncGVhbnV0JywndHVja2VyJywna2ls bGVyJywnY2FuYWRhJywnZ2VvcmdlJywnam9obm55Jywnc2llcnJhJywnYmxhemVyJywnYW5k cmV3Jywnc3Bhbmt5JywnZG9nZ2llJywnMjMyMzIzJywnd2ludGVyJywnenp6enp6JywnYnJh bmR5JywnZ3VubmVyJywnYmVhdmlzJywnY29tcGFxJywnaG9ybmV5JywnMTEyMjMzJywnY2Fy bG9zJywnYXJ0aHVyJywnZGFsbGFzJywndGVubmlzJywnc29waGllJywnbGFkaWVzJywnY2Fs dmluJywnc2hhdmVkJywncGVwcGVyJywnZ2lhbnRzJywnc3VyZmVyJywnZmVuZGVyJywnc2Ft c29uJywnYXVzdGluJywnbWVtYmVyJywnYmxvbmRlJywnYmxvd21lJywnZnVja2VkJywnZGFu aWVsJywnZG9uYWxkJywnZ29sZGVuJywnZ29sZmVyJywnY29va2llJywnc3VtbWVyJywnYnJv bmNvJywncmFjaW5nJywnc2FuZHJhJywnaGFtbWVyJywncG9va2llJywnam9zZXBoJywnaGVu dGFpJywnam9zaHVhJywnZGlhYmxvJywnYmlyZGllJywnbWFnZ2llJywnc2V4c2V4JywnbGl0 dGxlJywnYml0ZW1lJywnNjY2NjY2JywndG9wZ3VuJywnYXNobGV5Jywnd2lsbGllJywnc3Rp Y2t5JywnY293Ym95JywnYW5pbWFsJywnc2lsdmVyJywneWFtYWhhJywncWF6d3N4JywnZnVj a2VyJywnanVzdGluJywnc2tpcHB5Jywnb3JhbmdlJywnYmFuYW5hJywnbGFrZXJzJywnbWFy dmluJywnbWVybGluJywnZHJpdmVyJywncmFjaGVsJywnbWFyaW5lJywnc2xheWVyJywnYW5n ZWxzJywnYXNkZmdoJywnYmlnZG9nJywndmFnaW5hJywnYXBvbGxvJywnY2hlZXNlJywndG95 b3RhJywncGFya2VyJywnbWFkZG9nJywndHJhdmlzJywnMTIxMjEyJywnbG9uZG9uJywnaG90 ZG9nJywnd2lsc29uJywnc3lkbmV5JywnbWFydGluJywnZGVubmlzJywndm9vZG9vJywnZ2lu Z2VyJywnbWFnbnVtJywnYWN0aW9uJywnbmljb2xlJywnY2FydGVyJywnZXJvdGljJywnc3Bh cmt5JywnamFzcGVyJywnNzc3Nzc3JywneWVsbG93Jywnc21va2V5JywnZHJlYW1zJywnY2Ft YXJvJywneGF2aWVyJywndGVyZXNhJywnZnJlZGR5Jywnc2VjcmV0Jywnc3RldmVuJywnamVy ZW15JywndmlraW5nJywnZmFsY29uJywnc25vb3B5JywncnVzc2lhJywndGF5bG9yJywnbmlw cGxlJywnMTExMTExJywnZWFnbGVzJywnMTMxMzEzJywnd2lubmVyJywndGVzdGVyJywnMTIz MTIzJywnbWlsbGVyJywncm9ja2V0JywnbGVnZW5kJywnZmxvd2VyJywndGhlbWFuJywncGxl YXNlJywnb2xpdmVyJywnYWxiZXJ0J107DQoJc21kX3Byb2dfY29tbW9uX3B3WzddID0gWydw b3JzY2hlJywncm9zZWJ1ZCcsJ2NoZWxzZWEnLCdhbWF0ZXVyJywnNzc3Nzc3NycsJ2RpYW1v bmQnLCd0aWZmYW55JywnamFja3NvbicsJ3Njb3JwaW8nLCdjYW1lcm9uJywndGVzdGluZycs J3NoYW5ub24nLCdtYWRpc29uJywnbXVzdGFuZycsJ2JvbmQwMDcnLCdsZXRtZWluJywnbWlj aGFlbCcsJ2dhdGV3YXknLCdwaG9lbml4JywndGh4MTEzOCcsJ3JhaWRlcnMnLCdmb3JldmVy JywncGVhY2hlcycsJ2phc21pbmUnLCdtZWxpc3NhJywnZ3JlZ29yeScsJ2Nvd2JveXMnLCdk b2xwaGluJywnY2hhcmxlcycsJ2N1bXNob3QnLCdjb2xsZWdlJywnYnVsbGRvZycsJzEyMzQ1 NjcnLCduY2MxNzAxJywnZ2FuZGFsZicsJ2xlYXRoZXInLCdjdW1taW5nJywnaHVudGluZycs J2NoYXJsaWUnLCdyYWluYm93JywnYXNzaG9sZScsJ2JpZ2NvY2snLCdmdWNreW91JywnamVz c2ljYScsJ3BhbnRpZXMnLCdqb2huc29uJywnbmF1Z2h0eScsJ2JyYW5kb24nLCdhbnRob255 Jywnd2lsbGlhbScsJ2ZlcnJhcmknLCdjaGlja2VuJywnaGVhdGhlcicsJ2NoaWNhZ28nLCd2 b3lhZ2VyJywneWFua2VlcycsJ3JhbmdlcnMnLCdwYWNrZXJzJywnbmV3eW9yaycsJ3Ryb3Vi bGUnLCdiaWd0aXRzJywnd2luc3RvbicsJ3RodW5kZXInLCd3ZWxjb21lJywnYml0Y2hlcycs J3dhcnJpb3InLCdwYW50aGVyJywnYnJvbmNvcycsJ3JpY2hhcmQnLCc4Njc1MzA5JywncHJp dmF0ZScsJ3p4Y3Zibm0nLCduaXBwbGVzJywnYmxvbmRlcycsJ2Zpc2hpbmcnLCdtYXR0aGV3 JywnaG9vdGVycycsJ3BhdHJpY2snLCdmcmVlZG9tJywnZnVja2luZycsJ2V4dHJlbWUnLCdi bG93am9iJywnY2FwdGFpbicsJ2JpZ2RpY2snLCdhYmdydHl1JywnY2hlc3RlcicsJ21vbnN0 ZXInLCdtYXh3ZWxsJywnYXJzZW5hbCcsJ2NyeXN0YWwnLCdyZWJlY2NhJywncHVzc2llcycs J2Zsb3JpZGEnLCdwaGFudG9tJywnc2Nvb3RlcicsJ3N1Y2Nlc3MnXTsNCglzbWRfcHJvZ19j b21tb25fcHdbOF0gPSBbJ2ZpcmViaXJkJywncGFzc3dvcmQnLCcxMjM0NTY3OCcsJ3N0ZWVs ZXJzJywnbW91bnRhaW4nLCdjb21wdXRlcicsJ2Jhc2ViYWxsJywneHh4eHh4eHgnLCdmb290 YmFsbCcsJ3F3ZXJ0eXVpJywnamVubmlmZXInLCdkYW5pZWxsZScsJ3N1bnNoaW5lJywnc3Rh cndhcnMnLCd3aGF0ZXZlcicsJ25pY2hvbGFzJywnc3dpbW1pbmcnLCd0cnVzdG5vMScsJ21p ZG5pZ2h0JywncHJpbmNlc3MnLCdzdGFydHJlaycsJ21lcmNlZGVzJywnc3VwZXJtYW4nLCdi aWdkYWRkeScsJ21hdmVyaWNrJywnZWluc3RlaW4nLCdkb2xwaGlucycsJ2hhcmRjb3JlJywn cmVkd2luZ3MnLCdjb2NhY29sYScsJ21pY2hlbGxlJywndmljdG9yaWEnLCdjb3J2ZXR0ZScs J2J1dHRoZWFkJywnbWFybGJvcm8nLCdzcmluaXZhcycsJ2ludGVybmV0JywncmVkc2tpbnMn LCcxMTExMTExMScsJ2FjY2VzczE0JywncnVzaDIxMTInLCdzY29ycGlvbicsJ2lsb3ZleW91 Jywnc2FtYW50aGEnLCdtaXN0cmVzcyddOw0KDQoJLy8gQ2hlY2sgcHcgYWdhaW5zdCBjb21t b24gcGFzc3dvcmRzIG9mIHRoYXQgbGVuZ3RoIHRvIHNlZSBpZiBpdCdzIGluIHRvcCA1MDAN CglpZiAoc2l6ZSA+IDIgJiYgc2l6ZSA8IDkpIHsNCgkJdmFyIHdpZHRoID0gc21kX3Byb2df Y29tbW9uX3B3W3NpemVdLmxlbmd0aDsNCgkJZm9yICh2YXIgaWR4PTA7IGlkeCA8IHdpZHRo OyBpZHgrKykgew0KCQkJaWYgKHB3LnRvTG93ZXJDYXNlKCkgPT0gc21kX3Byb2dfY29tbW9u X3B3W3NpemVdW2lkeF0pIHsNCgkJCQlyZXR1cm4gLTE7DQoJCQl9DQoJCX0NCgl9DQoNCgkv LyBDYWxjdWxhdGlvbnMgcGVyIHNlY29uZC4gVGVuIG1pbGxpb24gaXMgcm91Z2hseSB0aGUg bnVtYmVyIGEgZGVjZW50IFBDIGNvdWxkIG1hbmFnZSB1bmluaGliaXRlZCBpbiAyMDEwLg0K CS8vIEF1dG9tYXRpY2FsbHkgZG91YmxlZCBldmVyeSAxOCBtb250aHMgYWNjb3JkaW5nIHRv IE1vb3JlJ3MgbGF3LCBhbW9ydGlzZWQgYnkgbW9udGgNCgl2YXIgY2FsY3NQZXJTZWMgPSAx MDAwMDAwMDsNCgl2YXIgZHQgPSBuZXcgRGF0ZSgpOw0KCXZhciBiYXNlWWVhciA9ICcyMDEw JzsNCgl2YXIgdGhpc1llYXIgPSBkdC5nZXRGdWxsWWVhcigpOw0KCXZhciB0aGlzTW9udGgg PSBkdC5nZXRNb250aCgpOyAvLyAwLTExDQoJdmFyIG1vbnRoc1NpbmNlQmFzZSA9ICgodGhp c1llYXIgLSBiYXNlWWVhcikgKiAxMikgKyB0aGlzTW9udGg7DQoJdmFyIG1vb3JlUGVyaW9k cyA9IE1hdGguZmxvb3IobW9udGhzU2luY2VCYXNlIC8gMTgpICsgMTsNCgljYWxjc1BlclNl YyAqPSBtb29yZVBlcmlvZHM7DQoJdmFyIGluY3JlbWVudFBlck1vbnRoID0gY2FsY3NQZXJT ZWMgLyAxODsgLy8gSG93IG1hbnkgY2FsY3MgaXQgZ29lcyB1cCBieSBpbiB0aGlzIE1vb3Jl IHBlcmlvZCwgcGVyIG1vbnRoDQoJY2FsY3NQZXJTZWMgKz0gKGluY3JlbWVudFBlck1vbnRo ICogKG1vbnRoc1NpbmNlQmFzZSUxOCkpOw0KDQoJLy8gS2VlcCB0cmFjayBvZiBob3cgbWFu eSBjaGFyYWN0ZXIgc2V0cyBhcmUgdXNlZA0KCXZhciBwb3NzQ2hhcnMgPSAwOw0KCS8vIExv d2VyY2FzZQ0KCWlmIChwdy5tYXRjaCgvW2Etel0vKSkgeyBwb3NzQ2hhcnMgKz0gMjY7IH0N CgkvLyBVcHBlcmNhc2UNCglpZiAocHcubWF0Y2goL1tBLVpdLykpIHsgcG9zc0NoYXJzICs9 IDI2OyB9DQoJLy8gTnVtYmVycw0KCWlmIChwdy5tYXRjaCgvXGQrLykpIHsgcG9zc0NoYXJz ICs9IDEwOyB9DQoJLy8gU3ltYm9scw0KCWlmIChwdy5tYXRjaCgvWyEsQCwjLMKjLCQs4oKs LMKlLCUsXiwmLCosKyw9LD8sXyx+LFwtLCgsKSw8LD4sXCwsXC4sXFssXF0sXHssXH0sXHws XDosXDssXCcsXCIsXGAsXC8sXFxcLFzCrF0vKSApIHtwb3NzQ2hhcnMgKz0gMzZ9Ow0KDQoJ Ly8gV29yayBvdXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnM6IHBvc3Np YmxlIGNoYXJhY3RlcnMgdG8gdGhlIHBvd2VyIG9mIHRoZSBwYXNzd29yZCBsZW5ndGgNCgl2 YXIgcG9zc0NvbWJvcyA9IE1hdGgucG93KHBvc3NDaGFycywgc2l6ZSk7DQoNCgkvLyBEaXZp ZGUgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkgdGhlIGNhbGN1bGF0 aW9ucyBhIFBDIGNhbiBkbyBwZXIgc2Vjb25kDQoJdmFyIGNyYWNrVGltZUluU2VjcyA9IHBv c3NDb21ib3MgLyBjYWxjc1BlclNlYzsNCg0KCS8vIFNldCB1cCBhbiBhcnJheSBvZiBwZXJp b2RzIHdpdGggdGhlaXIgbGVuZ3RocyBpbiBzZWNvbmRzDQoJdmFyIHNtZF9wZXJpb2RzID0g bmV3IEFycmF5KCk7DQoJc21kX3BlcmlvZHNbJ3RfbWluJ10gPSA2MDsNCglzbWRfcGVyaW9k c1sndF9ociddID0gc21kX3BlcmlvZHNbJ3RfbWluJ10gKiA2MDsNCglzbWRfcGVyaW9kc1sn dF9kYXknXSA9IHNtZF9wZXJpb2RzWyd0X2hyJ10gKiAyNDsNCglzbWRfcGVyaW9kc1sndF95 ciddID0gc21kX3BlcmlvZHNbJ3RfZGF5J10gKiAzNjUuMjU7DQoJc21kX3BlcmlvZHNbJ3Rf dGhvX3knXSA9IHNtZF9wZXJpb2RzWyd0X3lyJ10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0 X21pbF95J10gPSBzbWRfcGVyaW9kc1sndF90aG9feSddICogMTAwMDsNCglzbWRfcGVyaW9k c1sndF9iaWxfeSddID0gc21kX3BlcmlvZHNbJ3RfbWlsX3knXSAqIDEwMDA7DQoJc21kX3Bl cmlvZHNbJ3RfdHJpX3knXSA9IHNtZF9wZXJpb2RzWyd0X2JpbF95J10gKiAxMDAwOw0KCXNt ZF9wZXJpb2RzWyd0X3F1YV95J10gPSBzbWRfcGVyaW9kc1sndF90cmlfeSddICogMTAwMDsN CglzbWRfcGVyaW9kc1sndF9xdWlfeSddID0gc21kX3BlcmlvZHNbJ3RfcXVhX3knXSAqIDEw MDA7DQoJc21kX3BlcmlvZHNbJ3Rfc2V4X3knXSA9IHNtZF9wZXJpb2RzWyd0X3F1aV95J10g KiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NlcF95J10gPSBzbWRfcGVyaW9kc1sndF9zZXhf eSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9vY3RfeSddID0gc21kX3BlcmlvZHNbJ3Rf c2VwX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfbm9uX3knXSA9IHNtZF9wZXJpb2Rz Wyd0X29jdF95J10gKiAxMDAwOw0KDQoJLy8gUGVyaW9kIHR5cGUgaXMgJ3NlY29uZHMnIGJ5 IGRlZmF1bHQNCgl2YXIgcGVyaW9kVHlwZSA9ICd0X3NlYyc7DQoJdmFyIHN0cmVuZ3RoID0g Jyc7DQoNCgkvLyBJZiBpdCB3aWxsIHRha2UgbGVzcyB0aGFuIGEgc2Vjb25kIHRvIGNyYWNr IHRoZSBwYXNzd29yZCwgc2hvdyBleGFjdGx5IGhvdyBsb25nDQoJaWYgKGNyYWNrVGltZUlu U2VjcyA8IDEpIHsNCgkJc3RyZW5ndGggPSBjcmFja1RpbWVJblNlY3MudG9GaXhlZChwcmVj aXNpb24pICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NlY3MnKTsNCgl9IGVsc2Ugew0KCQkv LyBPdGhlcndpc2Ugc2hvdyBhIHJvdW5kZWQtZG93biBudW1iZXINCgkJLy8gQWRkcyB0aGUg cGx1cmFsIG9udG8gYW55dGhpbmcgYmVmb3JlIGEgdGhvdXNhbmQgeWVhcnMNCgkJdmFyIGlu dG9UaG91c2FuZHMgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncGx1cmFsJyk7DQoNCgkJLy8g QWRkcyB0aGUgJ0Fib3V0JyB0byBhbnl0aGluZyBhZnRlciBzZWNvbmRzDQoJCXZhciBpbnRv TWludXRlcyA9ICcnOw0KDQoJCS8vIFJvdW5kIGRvd24gdGhlIHRpbWUNCgkJdmFyIG5ld1Rp bWUgPSBNYXRoLmZsb29yKGNyYWNrVGltZUluU2Vjcyk7DQoNCgkJLy8gR28gdGhyb3VnaCBk aWZmZXJlbnQgcGVyaW9kIGxlbmd0aHMNCgkJZm9yICh2YXIgamR4IGluIHNtZF9wZXJpb2Rz KSB7DQoJCQkvLyBTdG9wIHdoZW4gdGhlIHJpZ2h0IHBlcmlvZCBpcyByZWFjaGVkDQoJCQlp ZiAoY3JhY2tUaW1lSW5TZWNzIDwgc21kX3BlcmlvZHNbamR4XSkgeyBicmVhazsgfQ0KCQkJ ZWxzZSB7DQoJCQkJaWYgKGpkeCA9PSAidF90aG9feSIpIHsgaW50b1Rob3VzYW5kcyA9ICcn OyB9DQoJCQkJaWYgKGpkeCA9PSAidF9taW4iKSB7IGludG9NaW51dGVzID0gc21kX3Byb2du b3N0aWNzX2dUeHQoJ2Fib3V0Jyk7IH0NCgkJCQluZXdUaW1lID0gTWF0aC5mbG9vcihjcmFj a1RpbWVJblNlY3MgLyBzbWRfcGVyaW9kc1tqZHhdKTsNCgkJCQlwZXJpb2RUeXBlID0gamR4 Ow0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgc2luZ3VsYXINCgkJaWYgKG5ld1RpbWUgPT0gMSkg ew0KCQkJc3RyZW5ndGggPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWJvdXQnKSArICcxICcg KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJpb2RUeXBlKTsNCgkJfSBlbHNlIHsNCgkJCS8v IENvbnZlcnQgbmV3VGltZSB0byBzdHJpbmcNCgkJCW5ld1RpbWUgKz0gJyc7DQoNCgkJCS8v IFNwbGl0IHdpdGggY29tbWFzIGV2ZXJ5IHRocmVlIGRpZ2l0cw0KCQkJdmFyIHJlZ2V4ID0g LyhcZCspKFxkezN9KS87DQoNCgkJCXdoaWxlIChyZWdleC50ZXN0KG5ld1RpbWUpKSB7DQoJ CQkJbmV3VGltZSA9IG5ld1RpbWUucmVwbGFjZShyZWdleCwgJyQxJyArIHNtZF9wcm9nbm9z dGljc19nVHh0KCdkaWdpdHNlcCcpICsgJyQyJyk7DQoJCQl9DQoNCgkJCS8vIENvbWJpbmUg d2l0aCAnYWJvdXQnIGlmIG5lZWRlZCwgdGhlIHRpbWUgaXQgd2lsbCB0YWtlLCB0aGUgcGVy aW9kIHR5cGUsIGFuZCB0aGUgJ3MnIGlmIG5lZWRlZA0KCQkJc3RyZW5ndGggPSBpbnRvTWlu dXRlcyArIG5ld1RpbWUgKyAiICIgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dChwZXJpb2RUeXBl KSArIGludG9UaG91c2FuZHM7DQoJCX0NCgl9DQoNCglyZXR1cm4gc3RyZW5ndGg7DQp9DQoN CmZ1bmN0aW9uIHBhc3N3b3JkQ2hlY2sodGhhdCwgZSkgew0KCWlmIChlLmtleUNvZGUgPT0g MjcgfHwgZS5jaGFyQ29kZSA9PSAyNykgew0KCQlqUXVlcnkodGhhdCkudmFsKCIiKTsNCgl9 DQoNCgl2YXIgcGFzc3dvcmQgPSBqUXVlcnkodGhhdCkudmFsKCk7DQoNCglpZiAocGFzc3dv cmQgIT0gIiIpIHsNCgkJdmFyIHN0cmVuZ3RoID0gc21kX3Byb2dfY2hyb25vU3RyZW5ndGgo cGFzc3dvcmQpOw0KDQoJCS8vVE9ETzogZ1R4dCgpDQoJCWlmIChzdHJlbmd0aCA9PSAtMSkg ew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNtZF9wcm9nbm9zdGljc19n VHh0KCdwd19wcmVhbWJsZScpICsgJyA8ZGl2IGNsYXNzPSJzbWRfcHJvZ19wYXNzX3N0cmVu Z3RoIj4nICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X2NvbW1vbicpICsgJzwvZGl2PiAn KyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcG9zdGFtYmxlJykpLmZhZGVJbig1MDApOw0K CQl9IGVsc2Ugew0KCQkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5odG1sKHNtZF9wcm9n bm9zdGljc19nVHh0KCdwd190YWtlJykgKyAnIDxkaXYgY2xhc3M9InNtZF9wcm9nX3Bhc3Nf c3RyZW5ndGgiPicgKyBzdHJlbmd0aCArICc8L2Rpdj4gJyArIHNtZF9wcm9nbm9zdGljc19n VHh0KCdwd19jcmFjaycpKS5mYWRlSW4oNTAwKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWpRdWVy eSgiI3NtZF9wcm9nX21ldGVyIikuaGlkZSgpOw0KCX0NCn0NCmpRdWVyeShmdW5jdGlvbigp IHsNCgl2YXIgc21kX3Byb2dfbWV0ZXIgPSAnPGRpdiBpZD0ic21kX3Byb2dfbWV0ZXIiPjwv ZGl2Pic7DQoJalF1ZXJ5KCIjY2hhbmdlX3Bhc3N3b3JkIikuYXBwZW5kKHNtZF9wcm9nX21l dGVyKTsNCglqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCglqUXVlcnkoIiNu ZXdfcGFzcyIpLmtleWRvd24oZnVuY3Rpb24oZSkgew0KCQlpZiAoZS5rZXlDb2RlID09IDEz IHx8IGUuY2hhckNvZGUgPT0gMTMpIHsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0pOw0K CWpRdWVyeSgiI25ld19wYXNzIikua2V5dXAoZnVuY3Rpb24oZSl7DQoJCXBhc3N3b3JkQ2hl Y2sodGhpcywgZSk7DQoJfSk7DQp9KTsNCi8vXV0+DQo8L3NjcmlwdD4NCkVPUzsNCn0NCg0K Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQovLyBXZWIgcGFnZQkJIDogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w L3BocHJvdGVjdG9yDQovLyBBdXRvcgkJCQk6IEh1Z28gU291c2EgCQlhZGFtYXN0b3I2NjZA Z21haWwuY29tDQovLyBEYXRlCQkJCSA6IDIwMTAtMDMtMjUNCi8vIFZlcnNpb24JCQk6IDAu My4xLjENCi8vDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KY2xhc3Mgc21kX3Byb2dfUGhQcm90ZWN0b3Igew0K CXZhciAkU0hPV19FUlJPUlM7DQoNCglwdWJsaWMgZnVuY3Rpb24gc21kX3Byb2dfUGhQcm90 ZWN0b3IoJHNob3dfZXJyb3JzKSB7DQoJCSR0aGlzLT5TSE9XX0VSUk9SUz0kc2hvd19lcnJv cnM7DQoJCWlmICgkdGhpcy0+U0hPV19FUlJPUlMpIHsNCgkJCWVycm9yX3JlcG9ydGluZyhF X0VSUk9SIHwgRV9XQVJOSU5HIHwgRV9QQVJTRSk7CSAvL1Nob3cgZXJyb3JzDQoJCQlpbmlf c2V0KCdkaXNwbGF5X2Vycm9ycycsICIxIik7CS8vZGlzcGxheSBlcnJvcnMNCgkJfSBlbHNl IHsNCgkJCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgIjAiKTsgLy9kaXNwbGF5IGVycm9y cw0KCQkJaW5pX3NldCgnbG9nX2Vycm9ycycsICIxIik7CS8vbG9nX2Vycm9ycw0KCQl9DQoJ fQ0KDQoJLyoNCgkqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIGEgaW5kZXggcGFn ZSB0aGF0IHJlZGlyZWN0cyB0byBvdGhlciBwYWdlcw0KCSoNCgkqLw0KCXB1YmxpYyBmdW5j dGlvbiBpc01hbGljaW91cygpIHsNCgkJJHNxbGkgPSAwOw0KDQoJCSRzcWxpID0gY2FsbGJh Y2tfZXZlbnQoJ3NtZF9wcm9nbm9zdGljcycsICdzcWxfaW5qZWN0aW9uJywgZmFsc2UpOw0K DQoJCWlmICghJHNxbGkpIHsNCgkJCSRudW1fYmFkX3dvcmRzMSA9ICR0aGlzLT5DaGVja0dl dCgpOw0KCQkJJG51bV9iYWRfd29yZHMyID0gJHRoaXMtPkNoZWNrUG9zdCgpOw0KCQ0KCQkJ aWYgKCRudW1fYmFkX3dvcmRzMSA+IDApIHsNCgkJCQkkc3FsaSA9IHRydWU7DQoJCQl9DQoJ DQoJCQlpZiAoJG51bV9iYWRfd29yZHMyID4gMCkgew0KCQkJCSRzcWxpID0gdHJ1ZTsNCgkJ CX0NCgkJfQ0KDQoJCXJldHVybiAoKCRzcWxpIDw9IDApID8gZmFsc2UgOiAkc3FsaSk7DQoJ fQ0KDQoJLy9jaGVjayBmb3Igc3FsIGluamVjdGlvbiBhbmQgWFNTIGluIFBvc3QgdmFyaWFi bGVzDQoJcHJpdmF0ZSBmdW5jdGlvbiBDaGVja1Bvc3QoKSB7DQoJCSRudW1fYmFkX3dvcmRz ID0gMDsNCg0KCQlmb3JlYWNoKCRfUE9TVCBhcyAkY2FtcG8gPT4gJGlucHV0KSB7DQoJCQkk X1BPU1RbJGNhbXBvXT0gZG9BcnJheSgkX1BPU1RbJGNhbXBvXSwgJ2h0bWxlbnRpdGllcycp OyAvLyBYU1MgUFJPVEVDVElPTg0KCQkJJG51bV9iYWRfd29yZHMgPSAkbnVtX2JhZF93b3Jk cyArICR0aGlzLT53b3JkRXhpc3RzKCRpbnB1dCk7IC8vU1FMIElOSkVDVElPTg0KCQl9DQoN CgkJcmV0dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0KCS8vY2hlY2sgZm9yIHNxbCBpbmpl Y3Rpb24gYW5kIFhTUyBpbiBHRVQgdmFyaWFibGVzDQoJcHJpdmF0ZSBmdW5jdGlvbiBDaGVj a0dldCgpIHsNCgkJJG51bV9iYWRfd29yZHMgPSAwOw0KDQoJCWZvcmVhY2goJF9HRVQgYXMg JGNhbXBvID0+ICRpbnB1dCl7DQoJCQkkX0dFVFskY2FtcG9dPSBkb0FycmF5KCRfR0VUWyRj YW1wb10sICdodG1sZW50aXRpZXMnKTsgLy8gWFNTIFBST1RFQ1RJT04NCg0KCQkJaWYoJHRo aXMtPmlzSWRJbmplY3Rpb24oJGNhbXBvLCRpbnB1dCkpeyAvL1NRTCBJRCBJTkpFQ1RJT04N CgkJCQkkbnVtX2JhZF93b3JkcyA9CSRudW1fYmFkX3dvcmRzICsgMC41Ow0KCQkJfQ0KDQoJ CQkkbnVtX2JhZF93b3JkcyA9ICRudW1fYmFkX3dvcmRzICsgJHRoaXMtPndvcmRFeGlzdHMo JGlucHV0KTsgLy9TUUwgSU5KRUNUSU9ODQoJCX0NCg0KCQlyZXR1cm4gJG51bV9iYWRfd29y ZHM7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4gdHJ1ZSBpZiBpbmplY3Rpb24gc3FsIHdvcmQg aXMgZm91bmQuDQoJKglUaGUgaW5wdXQgaXMgdGVzdGVkIGlmIGlzIGVxdWFsIHRvIGEgc3Fs IGluamVjdGlvbiBwYXR0ZXJuDQoJKglcYlteYS16XSo/ZHJvcFteYS16XSo/XGINCgkqCSBo dHRwOi8vd3d3LnBhZ2Vjb2x1bW4uY29tL3Rvb2wvcmVndGVzdC5odG0NCgkqKi8vKgkJICIv KiIsIisiCQkJCSovDQoJcHJpdmF0ZSBmdW5jdGlvbiB3b3JkRXhpc3RzKCRpbnB1dCkgew0K CQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJLyoNCgkJIFdPUkQgQUZURVINCgkJKi8NCgkJ JGJhZGRlbGltMSA9ICJbXmEtel0qIjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEi IHRvICJiIiBhbnl0aGluZyBlbHNlIGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0K CQkkYmFkZGVsaW0yID0gIlteYS16XSsiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJ1bmlvbiIs ICJzZWxlY3QiLCAic2hvdyIsICJpbnNlcnQiLCAidXBkYXRlIiwgImRlbGV0ZSIsICJkcm9w IiwgInRydW5jYXRlIiwgImNyZWF0ZSIsICJsb2FkX2ZpbGUiLCAiZXhlYyIsICIjIiwgIi0t Iik7DQoJCS8vIi8qIg0KCQlmb3JlYWNoKCRiYWR3b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJ JGV4cHJlc3Npb24gPSAiLyIuJGJhZGRlbGltMS5zdHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFk ZGVsaW0yLiIvIjsNCgkJCWlmIChwcmVnX21hdGNoICgkZXhwcmVzc2lvbiwgc3RydG9sb3dl cigkaW5wdXQpKSkgew0KLy9kbXAoJypXQSonLCRiYWR3b3JkLCAkaW5wdXQpOw0KCQkJCS8v ZGllKCJzcWwgaW5qZWN0aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJ CX0NCg0KCQkvKg0KCQlCRUZPUkUgV09SRA0KCQkqLw0KCQkkYmFkZGVsaW0xID0gIlteYS16 XSsiOwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIiIGFueXRoaW5nIGVs c2UgaXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRkZWxpbTIgPSAiW15h LXpdKiI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoIkBAdmVyc2lvbiIsICJAQGRhdGFkaXIiLCAi dXNlciIsICJ2ZXJzaW9uIik7DQoNCgkJZm9yZWFjaCgkYmFkd29yZHMgYXMgJGJhZHdvcmQp IHsNCgkJCSRleHByZXNzaW9uID0gIi8iLiRiYWRkZWxpbTEuc3RydG9sb3dlcigkYmFkd29y ZCkuJGJhZGRlbGltMi4iLyI7DQoJCQlpZiAocHJlZ19tYXRjaCAoJGV4cHJlc3Npb24sIHN0 cnRvbG93ZXIoJGlucHV0KSkpIHsNCi8vZG1wKCcqQlcqJywkYmFkd29yZCwgJGlucHV0KTsN CgkJCQkvL2RpZSgic3FsIGluamVjdGlvbiEiKTsNCgkJCQkkbnVtX2JhZF93b3JkcysrOw0K CQkJfQ0KCQl9DQoNCgkJLyoNCgkJQkVGT1JFIFdPUkQgQUZURVINCgkJKi8NCgkJJGJhZGRl bGltMSA9ICJbXmEtel0rIjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEiIHRvICJi IiBhbnl0aGluZyBlbHNlIGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0KCQkkYmFk ZGVsaW0yID0gIlteYS16XSsiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJiZW5jaG1hcmsiLCAi LS0iLCAidmFyY2hhciIsICJjb252ZXJ0IiwgImNoYXIiLCAibGltaXQiLCAiaW5mb3JtYXRp b25fc2NoZW1hIiwidGFibGVfbmFtZSIsICJmcm9tIiwgIndoZXJlIiwgIm9yZGVyIik7DQoN CgkJZm9yZWFjaCgkYmFkd29yZHMgYXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNzaW9uID0g Ii8iLiRiYWRkZWxpbTEuc3RydG9sb3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4iLyI7DQoJ CQlpZiAocHJlZ19tYXRjaCAoJGV4cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0KSkpIHsN Ci8vZG1wKCcqQi1XLUEqJywkYmFkd29yZCwgJGlucHV0KTsNCgkJCQkvL2RpZSgic3FsIGlu amVjdGlvbiEiKTsNCgkJCQkkbnVtX2JhZF93b3JkcysrOw0KCQkJfQ0KCQl9DQovL2RtcCgk bnVtX2JhZF93b3Jkcyk7DQoJCXJldHVybiAkbnVtX2JhZF93b3JkczsNCgl9DQoNCgkvKioN CgkqCXJldHVybiB0cnVlIGlmIGFuIElEIGlzIG5vdCByZWFsbHkgYW4gSUQNCgkqDQoJKiov DQoJcHJpdmF0ZSBmdW5jdGlvbiBpc0lESW5qZWN0aW9uKCRjYW1wbywkaW5wdXQpIHsNCgkJ JHJlZz0iL15pZC8iOw0KDQoJCWlmKHByZWdfbWF0Y2goJHJlZywgJGNhbXBvKSkgew0KCQkJ aWYoISR0aGlzLT5zdHJpbmdJc051bWJlck5vdFplcm8oJGlucHV0KSkgew0KCQkJCXJldHVy biB0cnVlOwkgLy8gaWYgaXMgSUQgYW5kIE5PVCBJTlRFR0VSIG9yIE5VTEwgLT4gU1FMIElO SkVDVElPTiEhDQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJ KglyZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIChkaWZmZXJlbnQgZnJv bSAwLCB0aGUgaWQgY291bGQgbm90IGJlIHplcm8hKQ0KCSogIFRPRE86IGNoZWNrIGlmICph bGwqIGNoYXJzIGFyZSB6ZXJvIGFuZCBmYWlsLCBlLmcuIGlkPTAwMDANCgkqKi8NCglwcml2 YXRlIGZ1bmN0aW9uIHN0cmluZ0lzTnVtYmVyTm90WmVybyggJHN0cmluZyApIHsNCgkJaWYg KGVtcHR5KCRzdHJpbmcpKSB7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIGN0 eXBlX2RpZ2l0KCRzdHJpbmcpOw0KCX0NCn0gLy9lbmQgY2xhc3MNCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5n cyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkDQovLyBUT0RPOiBUZXh0cGFjayB0aGlzDQpmdW5j dGlvbiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJ Z2xvYmFsICRwcmVmcywgJHNtZF9wcm9nbm9zdGljc19ldmVudDsNCgkkbGFuZyA9IGFycmF5 KA0KCQknYWNrZWQnID0+ICdBbGFybXMgYWNrbm93bGVkZ2VkLicsDQoJCSdhbGFybV9mcmVx JyA9PiAnQWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBldmVyeTogJywNCgkJJ2FuZCcgPT4gJyBh bmQgJywNCgkJJ2F1dGhfdXNlcnMnID0+ICdSZXN0cmljdCBwcm9nbm9zdGljIGNvbmZpZyB0 bzogJywNCgkJJ2F2YWlsX2JyYW5jaCcgPT4gJ0FuIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0 dGVybi5jb20vZG93bmxvYWQiPnVwZGF0ZSB0byB0aGlzIFRleHRwYXR0ZXJuIHNlcmllcyBp cyBhdmFpbGFibGU8L2E+JywNCgkJJ2F2YWlsX3R4cCcgPT4gJ0EgPGEgaHJlZj0iaHR0cDov L3RleHRwYXR0ZXJuLmNvbS9kb3dubG9hZCI+bmV3IHZlcnNpb24gb2YgVGV4dHBhdHRlcm4g aXMgYXZhaWxhYmxlPC9hPicsDQoJCSdibG9jaycgPT4gJ0Jsb2NrJywNCgkJJ2NoX2FkZCcg PT4gJ0FkZGl0aW9ucycsDQoJCSdjaF9kZWwnID0+ICdEZWxldGlvbnMnLA0KCQknY2hfbW9k JyA9PiAnTW9kaWZpY2F0aW9ucycsDQoJCSdjaGVja19iZXR3ZWVuJyA9PiAnQ2hlY2sgZmls ZXMgYmV0d2VlbjogJywNCgkJJ2NoZWNrX2ZvcicgPT4gJ0NoZWNrIGZpbGVzIGZvcjogJywN CgkJJ2NoZWNrX2ZyZXEnID0+ICdDaGVjayBmaWxlcyAoYXQgbW9zdCkgZXZlcnk6ICcsDQoJ CSdjaGVja19xdHknID0+ICdDaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lOiAnLA0K CQknY2hlY2tfd2hlcmUnID0+ICdDaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M6 ICcsDQoJCSdjc2knID0+ICdHYXRoZXIgZm9yZW5zaWNzIGFuZCBzZW5kIGZvciBhbmFseXNp cycsDQoJCSdjc2lfc2VudCcgPT4gJyBGb3JlbnNpY3MgZGF0YSBzZW50JywNCgkJJ2Nzdicg PT4gJyhjb21tYS1zZXBhcmF0ZWQpJywNCgkJJ2N1cnJtb24nID0+ICdZb3UgYXJlIGN1cnJl bnRseSBtb25pdG9yaW5nIHtjdXJyfSBvdXQgb2Yge291dG9mfSBhdmFpbGFibGUgZmlsZXMu JywNCgkJJ2RvY3Jvb3RfZmlsZXMnID0+ICdDb25zaWRlciBtb3ZpbmcgdGhlICJmaWxlcyIg Zm9sZGVyIG91dHNpZGUgb2YgeW91ciBzaXRlIHJvb3QgZm9sZGVyLiBZb3UgY2FuIGRvIHRo aXMgdmlhIHRoZSAiQWRtaW4gPiBQcmVmcyA+IEFkdmFuY2VkID4gRmlsZSBkaXJlY3Rvcnkg cGF0aCIgc2V0dGluZy4nLA0KCQknZG9jcm9vdF9wcm9nbm9zdGljcycgPT4gJ1BsZWFzZSBj aGFuZ2UgdGhlICJQcm9nbm9zdGljcyBmb2xkZXIiIHNldHRpbmcgdG8gYSBkaXJlY3Rvcnkg b3V0c2lkZSB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuJywNCgkJJ2RvY3Jvb3RfdG1wJyA9PiAn Q29uc2lkZXIgbW92aW5nIHRoZSAidG1wIiBmb2xkZXIgb3V0c2lkZSBvZiB5b3VyIHNpdGUg cm9vdCBmb2xkZXIuIFlvdSBjYW4gZG8gdGhpcyB2aWEgdGhlICJBZG1pbiA+IFByZWZzID4g QWR2YW5jZWQgPiBUZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGgiIHNldHRpbmcuJywNCgkJJ2V4 Y2x1ZGlyJyA9PiAnRXhjbHVkZSBmb2xkZXJzOiAnLA0KCQknZmlsZXNfdXBkYXRlZCcgPT4g J0ZpbGUgbGlzdCB1cGRhdGVkJywNCgkJJ2hlbHBfbGluaycgPT4gJyg8YSBocmVmPSJ7bGlu a30iPkhlbHA8L2E+KScsDQoJCSdobXMnID0+ICcoaHJzOm1pbnM6c2VjcyknLA0KCQknaWdu b3JlcycgPT4gJ0lnbm9yZSBmaWxlczogJywNCgkJJ2xibF9jaGFuZ2VkJyA9PiAnQ2hhbmdl ZCcsDQoJCSdsYmxfaGFzaG1vZCcgPT4gJ0NPTVBST01JU0VEJywNCgkJJ2xibF9taXNzaW5n JyA9PiAnTWlzc2luZycsDQoJCSdsYmxfYWRkZWQnID0+ICdBZGRlZCAobm90IG1vbml0b3Jl ZCknLA0KCQknbGlzdGxvYycgPT4gJ0ZpbGUgbG9jYXRpb25zOiAnLA0KCQknbWFpbHRvJyA9 PiAnU2VuZCBlLW1haWwgdG86ICcsDQoJCSdtYWlsdG9fY3NpJyA9PiAnU2VuZCBmb3JlbnNp Y3MgdG86ICcsDQoJCSdtb25maWxlc19leHBsYWluJyA9PiAnU2VsZWN0IGFsbCB0aGUgZmls ZXMgeW91IHdpc2ggdG8gbW9uaXRvciBhbmQgY2xpY2sgU2F2ZS4gQWx0ZXJpbmcgdGhpcyBs aXN0IHdpbGwgYXV0b21hdGljYWxseSBhY2tub3dsZWRnZSBhbnkgb3V0c3RhbmRpbmcgYWxh cm1zIGFnYWluc3QgdGhlIHNlbGVjdGVkIGZpbGVzLicsDQoJCSdub19hbGFybXMnID0+ICdO byBhbGFybXMgdG8gYWNrbm93bGVkZ2UgYXQgcHJlc2VudC4nLA0KCQknbm9fZmlsZXMnID0+ ICdObyBmaWxlcyB0byBsaXN0LiBDaGVjayB0aGUgcGx1Z2luIHNldHVwIChhbmQgU2F2ZSBp dCkuJywNCgkJJ25vX2xvZ19lbnRyaWVzJyA9PiAnTm8gbG9nIGFjdGl2aXR5IGFyb3VuZCB0 aGUgdGltZSBvZiB0aGUgZGlmZmVyZW5jZXMuJywNCgkJJ25vbmVfc2VsZWN0ZWQnID0+ICdO byBmaWxlcyBzZWxlY3RlZCcsDQoJCSdub3Rfd3JpdGFibGUnID0+ICd7bG9jYXRpb259IGlz IG5vdCBhIGRpcmVjdG9yeSBvciBpcyBub3Qgd3JpdGFibGUnLA0KCQknbm90aWZ5X2VtYWls JyA9PiAnRS1tYWlsJywNCgkJJ25vdGlmeV90eHAnID0+ICdUWFAgaW50ZXJmYWNlJywNCgkJ J25vdGlmeV92aWEnID0+ICdOb3RpZnkgdmlhOiAnLA0KCQkncHJlYW1ibGVfYWRkZWQnID0+ ICdUaGVzZSBmaWxlcyBoYXZlIGJlZW4gYWRkZWQ6ICcsDQoJCSdwcmVhbWJsZV9maWxlcycg PT4gJ0ZpbGUgY29udGVudHMgZm9sbG93czogJywNCgkJJ3ByZWFtYmxlX2hhc2hkb3duJyA9 PiAnV0FSTklORyEgVGhlIGNoZWNrc3VtcyBmaWxlIGlzIG1pc3NpbmcuJywNCgkJJ3ByZWFt YmxlX2hhc2htb2QnID0+ICdXQVJOSU5HISBUaGUgY2hlY2tzdW1zIGZpbGUgaGFzIGJlZW4g YWx0ZXJlZDogJywNCgkJJ3ByZWFtYmxlX21pc3MnID0+ICdUaGVzZSBmaWxlcyBhcmUgbWlz c2luZzogJywNCgkJJ3ByZWFtYmxlX25vaycgPT4gJ1RoZXNlIGZpbGVzIGRpZmZlciBmcm9t IHRoZWlyIGV4cGVjdGVkIGNvbnRlbnQ6ICcsDQoJCSdwcmVhbWJsZV9zcWxfaW5qZWN0JyA9 PiAnUG9zc2libGUgU1FMIGluamVjdGlvbiBkZXRlY3RlZCcsDQoJCSdwcmVhbWJsZV90eHBs b2cnID0+ICdMb2cgZW50cmllcyBwcmlvciB0byB0aGlzIGRldGVjdGlvbjogJywNCgkJJ3By b2dsb2MnID0+ICdQcm9nbm9zdGljcyBmb2xkZXI6ICcsDQoJCSdwcm9ncGZ4JyA9PiAnVW5p cXVlIHByZWZpeDogJywNCgkJJ3BubF9hY2snID0+ICdBbGFybXMnLA0KCQkncG5sX2Fja2l0 JyA9PiAnQWNrbm93bGVkZ2UnLA0KCQkncG5sX2FkdmljZScgPT4gJ0FkdmljZScsDQoJCSdw bmxfY3NpJyA9PiAnU2VuZCBGb3JlbnNpY3MnLA0KCQkncG5sX2ZpbGVzJyA9PiAnRmlsZXMn LA0KCQkncG5sX2lnbm9yZScgPT4gJ0lnbm9yZScsDQoJCSdwbmxfc2V0dXAnID0+ICdTZXR1 cCcsDQoJCSdwb3N0YW1ibGUnID0+ICdBY2tub3dsZWRnZSBhbGFybXMnLA0KCQkncmVxX2hl YWRlcnMnID0+ICdCbG9jayByZXF1ZXN0IGhlYWRlcnM6ICcsDQoJCSdyZXFfbm90X2FsbG93 ZWQnID0+ICdSRVFVRVNUX01FVEhPRCBub3QgYWxsb3dlZDoge3JlcX0nLA0KCQkncmhfZGVs JyA9PiAnREVMRVRFJywNCgkJJ3JoX3B1dCcgPT4gJ1BVVCcsDQoJCSdyaF90cmFjZScgPT4g J1RSQUNFJywNCgkJJ3R0bF9hY2snID0+ICdQcm9nbm9zdGljIGFsYXJtIGFja25vd2xlZGdl bWVudCcsDQoJCSd0dGxfYWR2aWNlJyA9PiAnUHJvZ25vc3RpYyBhZHZpY2UnLA0KCQkndHRs X2ZpbGVzJyA9PiAnUHJvZ25vc3RpYyBmaWxlIG1vbml0b3JpbmcnLA0KCQkndHRsX2ZpbGVv cHRzJyA9PiAnRmlsZXN5c3RlbSBvcHRpb25zJywNCgkJJ3R0bF9tb25vcHRzJyA9PiAnTW9u aXRvcmluZyBvcHRpb25zJywNCgkJJ3R0bF9wbHVnb3B0cycgPT4gJ1BsdWdpbiBvcHRpb25z JywNCgkJJ3R0bF9yZWFsb3B0cycgPT4gJ1JlYWx0aW1lIG9wdGlvbnMnLA0KCQkndHRsX3Nl dHVwJyA9PiAnUHJvZ25vc3RpYyBzZXR1cCcsDQoJCSdycGNfZXhpc3RzJyA9PiAnVGhlIHJw YyBkaXJlY3RvcnkgaXMgbm90IGJlaW5nIHVzZWQuIENvbnNpZGVyIHJlbW92aW5nIGl0Lics DQoJCSdydF9oZHInID0+ICdIZWFkZXIgdmlvbGF0aW9ucycsDQoJCSdydF9zcWwnID0+ICdT UUwgaW5qZWN0aW9ucycsDQoJCSdzZWNvbmRzJyA9PiAnKHNlY29uZHMpJywNCgkJJ3NlbmRf Zm9yZW5zaWNzJyA9PiAnU2VuZCBmb3JlbnNpY3MgZm9yOiAnLA0KCQknc2V0dXBfZXhpc3Rz JyA9PiAnVGhlIHNldHVwIGRpcmVjdG9yeSBzdGlsbCBleGlzdHMuIFBsZWFzZSBkZWxldGUg aXQuJywNCgkJJ3NtZF9wcm9nbm9zdGljcycgPT4gJ1Byb2dub3N0aWNzJywNCgkJJ3Nob3df Z3JhbnRzJyA9PiAnWW91ciBUWFAgdXNlciBjYW4gYWNjZXNzIHRoZSBNeVNRTCBwcml2aWxl Z2VzIGluIHRoZSBEQi4gQ29uc2lkZXIgYWNjZXNzaW5nIHRoZSBEQiB1c2luZyBhIGxlc3Mg cHJpdmlsZWdlZCB1c2VyLicsDQoJCSdzcWxfZmlsZV9wcml2cycgPT4gJ1lvdXIgTXlTUUwg dXNlciBoYXMgRklMRSBwcml2aWxlZ2VzLiBDb25zaWRlciByZXZva2luZyB0aGlzIHJpZ2h0 IHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4nLA0KCQknc3FsX2luamVjdCcgPT4gJ1By b3RlY3QgYWdhaW5zdCBTUUwgaW5qZWN0aW9uOiAnLA0KCQknc3RhdF9naWQnID0+ICdHcm91 cCBJRDogJywNCgkJJ3N0YXRfbW9kJyA9PiAnTW9kaWZpZWQ6ICcsDQoJCSdzdGF0X25hbWUn ID0+ICdGaWxlbmFtZTogJywNCgkJJ3N0YXRfc2l6ZScgPT4gJ1NpemU6ICcsDQoJCSdzdGF0 X3VpZCcgPT4gJ1VzZXIgSUQ6ICcsDQoJCSdzdWJqZWN0JyA9PiAnUHJvZ25vc3RpY3MgKCcu JHByZWZzWydzaXRldXJsJ10uJyknLA0KCQknc3ViamVjdF9jc2knID0+ICdQcm9nbm9zdGlj cyAoJy4kcHJlZnNbJ3NpdGV1cmwnXS4nKSBmb3JlbnNpY3MnLA0KCQkndGlnaHQnID0+ICdZ b3UgcnVuIGEgcHJldHR5IHRpZ2h0IHNoaXAuIFN0YXkgZnJvc3R5LicsDQoJCSd0eHBkaXIn ID0+ICdBZG1pbi1zaWRlIFVSTDogJywNCgkJJ3dhcm5fbG9jJyA9PiAnRmlsZSBsb2NhdGlv bnMgY2hhbmdlZC4gVXBkYXRlIHlvdXIgPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PScuJHNt ZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+ bGlzdCBvZiBmaWxlczwvYT4gbm93JywNCgkJJ3dpdGgnID0+ICcgd2l0aDogJywNCgkpOw0K CXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czox OiIxIjtzOjU6Im9yZGVyIjtzOjE6IjEiO3M6NToiZmxhZ3MiO3M6MToiMSI7czo0OiJoZWxw IjtzOjI2NDgyOiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF9wcm9nbm9zdGljczwv aDE+CgoJPHA+VGhlIDxlbT5BZG1pbiAtJmd0OyBEaWFnbm9zdGljczwvZW0+IHRhYiBpcyBn cmVhdCBpZiB5b3UgcmVtZW1iZXIgdG8gbG9vayBhdCBpdCBmcm9tIHRpbWUgdG8gdGltZS4g QnV0IGlmIHlvdXIgc2VydmVyIGlzIGNvbXByb21pc2VkLCBob3cgd291bGQgeW91IGtub3cg YWJvdXQgYSBzbmVha3kgVHJvamFuIG9yIG1hbHdhcmUgdW50aWwgeW91ciB2aXNpdG9ycyBj b21wbGFpbiBvciB0aGUgc2VhcmNoIGVuZ2luZXMgYmxvY2sgeW91ciBzaXRlPzwvcD4KCgk8 cD5UaGUgYW5zd2VyIGlzIHRvIHVzZSBzbWRfcHJvZ25vc3RpY3MgdG8gdGVsbCB5b3Ugd2hl biB0aGluZ3MgaGF2ZSBjaGFuZ2VkIHNvIHlvdSBjYW4gdGFrZSBhY3Rpb24gaW1tZWRpYXRl bHkuPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5Nb25pdG9yIGZpbGVz IGFuZCBhdHRhY2tzIGluIGFuZCBhcm91bmQgeW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBpbnN0YWxsYXRpb248L2xpPgoJCTxsaT5BdXRvbWF0aWNhbGx5IGRldGVjdCBh bnkgY2hhbmdlcyBhbmQgZGlzcGxheS9zZW5kIG5vdGlmaWNhdGlvbiB0byBkZXNpZ25hdGVk IHVzZXIocyk8L2xpPgoJCTxsaT5DdXN0b21pc2Ugd2hlcmVhYm91dHMgYW5kIGhvdyBvZnRl biB0aGUgY2hlY2tzIGFyZSBwZXJmb3JtZWQ8L2xpPgoJCTxsaT5BY2tub3dsZWRnZSBrbm93 biBhbHRlcmF0aW9ucyBhbmQgY29uZmlndXJlIHJlcGVhdCBhbGFybXMgaWYgdGhlIHNpdHVh dGlvbiByZW1haW5zIHVuY2hlY2tlZDwvbGk+CgkJPGxpPlJ1ZGltZW50YXJ5IHBhc3N3b3Jk IHN0cmVuZ3RoIG1ldGVyIGluY2x1ZGVkPC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNy ZWRpdHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gS2V2aW4gUG90 dHMgYW5kIFN0ZXZlIERpY2tpbnNvbiBmb3IgYmV0YSB0ZXN0aW5nIGFuZCBmZWF0dXJlIGVu aGFuY2VtZW50cy4gQWxzbyBrdWRvcyB0byBzbWFsbGhhZHJvbmNvbGxpZGVyIGZvciB0aGUg YmFzaXMgb2YgdGhlIHBhc3N3b3JkIHN0cmVuZ3RoIGNhbGN1bGF0b3IgYW5kIEh1Z28gU291 c2EgZm9yIHRoZSBwaFByb3RlY3RvciBjbGFzcy48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAv IHVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5SZXF1aXJlcyA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjMuMCsgYW5kIDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IDU8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVp dGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTE5NS9zbWRf cHJvZ25vc3RpY3MiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29k ZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQ bHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBOb3RlIHRoYXQg aXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcGx1Z2luIHJ1bnMgYXMgcHJpb3JpdHkgMSBz byBpdCBjYW4gZGV0ZWN0IHRoaW5ncyBiZWZvcmUgb3RoZXIgcGx1Z2lucy48L3A+CgoJPHA+ VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgPGVtPkFkbWluIC0mZ3Q7IFBsdWdpbnM8 L2VtPiBwYWdlLiBZb3UgbWF5IHVzZSBzbWRfcHJlZmFsaXplciB0byByZW1vdmUgYW55IDxj b2RlPnNtZF9wcm9nbm9zdGljc18qPC9jb2RlPiBwcmVmZXJlbmNlcyB0aGF0IHRoZSBwbHVn aW4gY3JlYXRlZC48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNDkzOCI+Zm9ydW0gdGhyZWFkPC9h PiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndp c2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPlF1aWNrIHN0YXJ0OiB0aGUgdGhyZWUgc3Rl cHMgdG8gZGV0ZWN0aW9uPC9oMj4KCgk8b2w+CgkJPGxpPlZpc2l0IDxlbT5FeHRlbnNpb25z IC0mZ3Q7IFByb2dub3N0aWNzPC9lbT4sIGFsdGVyIHRoZSBzZXR1cCBpbmZvcm1hdGlvbiB0 byB0YXN0ZSBhbmQgPHN0cm9uZz5tYWtlIHN1cmUgeW91IDxlbT5TYXZlPC9lbT4gaXQ8L3N0 cm9uZz48L2xpPgoJCTxsaT5DbGljayB0aGUgUHJvZ25vc3RpYyB0YWImIzgyMTc7cyA8ZW0+ RmlsZXM8L2VtPiBidXR0b24gKGlnbm9yZSBhbnkgd2FybmluZyBhYm91dCBtaXNzaW5nIGNo ZWNrc3VtcyBmb3Igbm93OiB0aGV5JiM4MjE3O3ZlIG5vdCBiZWVuIGNyZWF0ZWQgeWV0KSBh bmQgY2hvb3NlIHRoZSBmaWxlcyB5b3Ugd2lzaCB0byBtb25pdG9yLiA8c3Ryb25nPk1ha2Ug c3VyZSB5b3UgPGVtPlNhdmU8L2VtPiB0aGUgY2hhbmdlczwvc3Ryb25nPjwvbGk+CgkJPGxp PkdvIGFib3V0IHlvdXIgYnVzaW5lc3MuIElmIHRoZSBmaWxlc3lzdGVtIGNoYW5nZXMgeW91 JiM4MjE3O2xsIGJlIHRvbGQgYWJvdXQgaXQuIFBsZWFzZSBjb25zaWRlciBoZWxwaW5nIHRv IDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfYmV0dGVyIj5tYWtlIHRoZSBwbHVnaW4gYmV0dGVy PC9hPjwvbGk+Cgk8L29sPgoKCTxoMiBpZD0ic21kX3Byb2doZWxwX3NldHVwIj5TZXR1cDwv aDI+CgoJPHA+VGhlIDxlbT5Qcm9nbm9zdGljIHNldHVwPC9lbT4gcGFnZSBob3VzZXMgdGhl IGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6PC9wPgoKCTxoMz5Nb25pdG9yaW5n IG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIGZp bGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczwvc3Bhbj4gOiBjaGVja3MgYXJlIGFsd2F5cyBw ZXJmb3JtZWQgd2hlbiBwZW9wbGUgdmlzaXQgYWRtaW4gc2lkZSB0YWJzLiBZb3UgbWF5IGFs c28gZWxlY3QgdG8gY2hlY2sgdGhlIGZpbGVzIHdoZW4gdmlzaXRvcnMvYm90cyBicm93c2Ug eW91ciB3ZWIgc2l0ZSBpZiB5b3UgcHJlZmVyIChzZWUgPGEgaHJlZj0iI3NtZF9wcm9naGVs cF9ob3dpdHdvcmtzIj5ob3cgaXQgd29ya3M8L2E+IGZvciBkZXRhaWxzKS48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+Q2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5PC9zcGFu PiA6IHRoZSBwbHVnaW4gZG9lcyBub3QgY2hlY2sgdGhlIGZpbGVzIGV2ZXJ5IGNsaWNrIGJl Y2F1c2UgdGhhdCB3b3VsZCBwbGFjZSB1bm5lY2Vzc2FyeSBzdHJhaW4gb24gdGhlIHNlcnZl ci4gSW5zdGVhZCB5b3UgY2hvb3NlIGEgY29uZmlndXJhYmxlIHRpbWUgJiM4MjEyOyBpbiBz ZWNvbmRzICYjODIxMjsgYWZ0ZXIgd2hpY2ggdGhlIHZlcnkgbmV4dCBhZG1pbi0gb3IgcHVi bGljLXNpZGUgY2xpY2sgd2lsbCB0cmlnZ2VyIHRoZSBjaGVjay48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Q2hlY2sgZmlsZXMgYmV0d2Vlbjwvc3Bhbj4gOiB0d28gdGltZXMg b2YgZGF5IGJldHdlZW4gd2hpY2ggdGhlIGZpbGVzIHdpbGwgYmUgY2hlY2tlZC4gWW91IGNv dWxkIHNldCB0aGlzIHRvIG9mZi1wZWFrIGhvdXJzIGlmIHlvdSBwcmVmZXJyZWQgdG8gbWlu aW1pc2UgdGhlIHBsdWdpbiYjODIxNztzIGltcGFjdCBvbiBkYXl0aW1lIHZpc2l0b3JzLiBE ZWZhdWx0OiA8Y29kZT4wMDowMCA9Jmd0OyAyMzo1OTwvY29kZT48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+Q2hlY2sgdGhpcyBtYW55IGZpbGVzIGVhY2ggdGltZTwvc3Bhbj4g OiBpbnN0ZWFkIG9mIHRlc3RpbmcgZXZlcnkgc2luZ2xlIGZpbGUgZWFjaCB0aW1lICYjODIx Mjsgd2hpY2ggd2lsbCBzbG93IGRvd24geW91ciBzaXRlIC8gYWRtaW4gc2lkZSAmIzgyMTI7 IGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gb25seSBjaGVjayBhIHN1YnNldCBvZiBmaWxlcyBl dmVyeSB0aW1lIHRoZSBwbHVnaW4gaXMgdHJpZ2dlcmVkLjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5BbGFybSBvbiBkZXRlY3Rpb24gYW5kIGV2ZXJ5PC9zcGFuPiA6IHdoZW4g c29tZXRoaW5nIGhhcyBjaGFuZ2VkIGFuZCBpdCYjODIxNztzIGRldGVjdGVkLCBhbiBhbGFy bSBhY3Rpb24gaXMgYWx3YXlzIHRha2VuLiBCdXQgaWYgdGhlIHBsdWdpbiBjb250aW51YWxs eSBib21iYXJkZWQgeW91IHdpdGggaW5mb3JtYXRpb24gaXQgd291bGQgYmUgYW5ub3lpbmcg YW5kIG5vdCBhcyB1c2VmdWwuIFRoaXMgc2V0dGluZyBhbGxvd3MgeW91IHRvIGNvbmZpZ3Vy ZSB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXBlYXQgbmFncyBvZiB0aGUgc2FtZSBtZXNzYWdl LiBPbmNlIGEgZGF5ICh0aGUgZGVmYXVsdCBvZiA4NjQwMCBzZWNvbmRzKSBieSBlLW1haWwg aXMgdXN1YWxseSBlbm91Z2ggdW5sZXNzIHlvdSYjODIxNztyZSBhIG1hc29jaGlzdC4gTm90 ZSB0aGF0IGlmIG1vcmUgZmlsZXMgYXJlIGNoYW5nZWQgJiM4MjEyOyBldmVuIHdoZW4gdGhl IHRpbWVvdXQgcGVyaW9kIGhhcyB5ZXQgdG8gZWxhcHNlICYjODIxMjsgeW91IHdpbGwgcmVj ZWl2ZSBhbm90aGVyIGFsZXJ0LjxkaXYgY2xhc3M9InNtZF9icmVhayI+WW91IG1heSBzcGVj aWZ5IHR3byB2YWx1ZXMgKGNvbW1hLXNlcGFyYXRlZCkgaWYgeW91IHdpc2g6IHRoZSBmaXJz dCBpcyB0aGUgdGltZSBiZXR3ZWVuIG5vdGlmaWNhdGlvbnMgdG8gdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IGFkbWluIHNpZGU7IHRoZSBzZWNvbmQgaXMgdGhlIHRpbWUg YmV0d2VlbiBlLW1haWxzLiBJZiB5b3UgdXNlIG9ubHkgb25lIHZhbHVlIHRoZW4gaXQgd2ls bCBiZSBhcHBsaWVkIHRvIGJvdGguPC9kaXY+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPk5vdGlmeSB2aWE8L3NwYW4+IDogY2hvb3NlIGhvdyB5b3Ugd2lzaCB0byBiZSBub3Rp ZmllZDoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gSW50ZXJm YWNlIHdpbGwgZGlzcGxheSBhIG1lc3NhZ2Ugb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IGFkbWluIHNpZGUgd2hlbiBhIGNoYW5nZSBpcyBkZXRlY3RlZC48L2xpPgoJ CTxsaT5FLW1haWwgd2lsbCBzZW5kIG91dCBhbiBlLW1haWwgYWJvdXQgdGhlIGNoYW5nZXMu PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlNlbmQgZS1tYWls IHRvPC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGUtbWFpbCBhZGRyZXNzIHJl Y2lwaWVudHMuIElmIHRoaXMgaXMgZW1wdHkgbm8gZS1tYWlscyB3aWxsIGJlIHNlbnQgZXZl biBpZiB5b3UgY2hvb3NlIHRvIGJlIG5vdGlmaWVkIHZpYSBlLW1haWwuPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPlNlbmQgZm9yZW5zaWNzIHRvPC9zcGFuPiA6IGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIGUtbWFpbCBhZGRyZXNzIHJlY2lwaWVudHMgdG8gcmVjZWl2ZSBm b3JlbnNpY3MgZGF0YSAodGhlIG5hdHRpbHktdGl0bGVkIDxlbT5mcm9nbm9zdGljczwvZW0+ KS4gWW91IGNhbiBjaG9vc2Ugbm9ib2R5IGlmIHlvdSB3aXNoIHRvIGRpc2FibGUgdGhpcyBm ZWF0dXJlLCBvciBzZW5kIHRoZW0gdG8geW91cnNlbGYsIG9yIDxhIGhyZWY9IiNzbWRfcHJv Z2hlbHBfYmV0dGVyIj50byBtZSBmb3IgYW5hbGF5c2lzPC9hPi4gPHN0cm9uZz5QbGVhc2Ug bm90ZSB0aGF0IHNvbWUgZGF0YSBpcyBxdWl0ZSBzZW5zaXRpdmUgYW5kIG1heSBkaXZ1bGdl IHBhdGhzIHRvIHlvdXIgZmlsZXMgb3Igc2l0ZTwvc3Ryb25nPi4gSWYgeW91IHByZWZlciB0 byBrZWVwIHN0dWZmIHByaXZhdGUgYnkgYWxsIG1lYW5zIHNhbml0aXplIHRoZSBmb3JlbnNp Y3MgYW5kIHNlbmQgdGhlIGVkaXRlZCBoaWdobGlnaHRzIHRvIG1lIGZvciBhbmFseXNpcyBp ZiB5b3Ugd2lzaC48L2xpPgoJPC91bD4KCgk8aDM+UmVhbHRpbWUgb3B0aW9uczwvaDM+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QmxvY2sgcmVxdWVzdCBoZWFkZXJzPC9z cGFuPiA6IGlmIHlvdSBlbmFibGUgdGhpcyBmYWNpbGl0eSB5b3UgY2FuIGVsZWN0IHRvIGJs b2NrIG9yIGFsbG93IGNlcnRhaW4gdHlwZXMgb2Ygc3BlaWNhbCA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRUUDwvc3Bhbj4gcmVxdWVzdC4gQW55IHJlcXVlc3Qgb2YgYSBjaGVja2VkIHR5cGUg d2lsbCBiZSBibG9ja2VkIGFuZCBhIG1lc3NhZ2Ugd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFk IG9mIHRoZSBwYWdlLiBUaGUgY29yZSB0eXBlcyA8c3BhbiBjbGFzcz0iY2FwcyI+R0VUPC9z cGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPlBPU1Q8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2Fw cyI+SEVBRDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5PUFRJT05TPC9zcGFuPiBh cmUgYXV0b21hdGljYWxseSBhbGxvd2VkIGJlY2F1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gcmVxdWlyZXMgdGhlbS4gVGhlIHJlbWFpbmluZyB0aHJlZSAmIzgyMTI7IDxz cGFuIGNsYXNzPSJjYXBzIj5UUkFDRTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5QVVQ8 L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+REVMRVRFPC9zcGFuPiAmIzgyMTI7IGFy ZSBzcGVjaWFsaXN0IGhlYWRlcnMgdGhhdCBhcmVuJiM4MjE3O3QgdXNlZCBieSB0aGUgY29y ZSBidXQgbWF5IGJlIHJlcXVpcmVkIGJ5IHNvbWUgcGx1Z2lucy4gUGVybWl0IHRoZW0gaWYg eW91IHdpc2ggYnkgY2xlYXJpbmcgdGhlIHJlbGV2YW50IGNoZWNrIGJveChlcyksIG90aGVy d2lzZSBmb3IgbWF4aW11bSBwcm90ZWN0aW9uIGtlZXAgdGhpcyBmZWF0dXJlIHN3aXRjaGVk IG9uIHdpdGggYWxsIHRocmVlIHR5cGVzIG9mIGhlYWRlciBjaGVja2VkLjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5Qcm90ZWN0IGFnYWluc3QgPHNwYW4gY2xhc3M9ImNhcHMi PlNRTDwvc3Bhbj4gaW5qZWN0aW9uPC9zcGFuPiA6IG1vbml0b3IgaW5jb21pbmcgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9z cGFuPiBpbmplY3Rpb24gYXR0YWNrcyBhbmQgZGVhbCB3aXRoIHRoZW0gaW4gYSB2YXJpZXR5 IG9mIHdheXMuIFdoZW4gYW4gYXR0YWNrIGlzIGRldGVjdGVkIHRoZSByZXF1ZXN0IGNhbiBi ZSA8Y29kZT5CbG9jazwvY29kZT5lZCBvciB5b3UgY2FuIHNlbmQgYW4gPHNwYW4gY2xhc3M9 ImNhcHMiPkhUVFA8L3NwYW4+IHN0YXR1cyBoZWFkZXIgc28geW91IGNhbiBkZWFsIHdpdGgg dGhlIGF0dGFjayBvbiB5b3VyIGVycm9yIHBhZ2VzLiBJZiB5b3UgdHlwZSBhbnl0aGluZyBp biB0aGUgPGNvZGU+d2l0aDwvY29kZT4gYm94LCB0aGUgZ2l2ZW4gbWVzc2FnZSB3aWxsIGJl IGRpc3BsYXllZCBvbiB0aGUgcGFnZS4gWW91IG1heSBzcGVjaWZ5IDxjb2RlPnR4cF9mb3Jt Om5hbWUtb2YtZm9ybTwvY29kZT4gaW4gdGhlIDxjb2RlPndpdGg8L2NvZGU+IGJveCB0byBo YW5kIG9mZiBjb250cm9sIHRvIGEgY3VzdG9tIGZvcm0gZmlyc3QgYmVmb3JlIHRoZSByZXN1 bHQgaXMgdGhyb3duIHRvIHRoZSBwYWdlLiBZb3UgY291bGQgdXNlIHRoaXMsIGZvciBleGFt cGxlLCB0byBtYWlsIG9mZiB5b3VyIG93biBkaWFnbm9zdGljcyBvciB0byBtYWtlIGEgZGVj aXNpb24gb24gd2hldGhlciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gYXR0 YWNrIHdhcyBsZWdpdGltYXRlIG9yIG5vdCBhbmQgZWl0aGVyIGJsb2NrIGl0IHlvdXJzZWxm IG9yIHN0cmlwIG91dCBhbnl0aGluZyBkb2RneSBhbmQgc2VuZCB0aGUgcmVxdWVzdCBvbi4g SWYgeW91IHdpc2ggdG8gZ28gZnVydGhlciwgdGhlcmUgaXMgYSA8YSBocmVmPSIjc21kX3By b2doZWxwX2NhbGxiYWNrcyI+Y2FsbGJhY2sgYXZhaWxhYmxlPC9hPjwvbGk+Cgk8L3VsPgoK CTxoMz5GaWxlc3lzdGVtIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPkNoZWNrIGZpbGVzIGZvcjwvc3Bhbj4gOiBjaG9vc2Ugd2hhdCB0eXBlIG9mIGFs dGVyYXRpb25zIHlvdSB3aXNoIHRvIG1vbml0b3I6IG5ldyBmaWxlcyBhZGRlZCwgZmlsZXMg ZGVsZXRlZCBvciBmaWxlcyBtb2RpZmllZC4gQnkgZGVmYXVsdCwgYWRkaXRpb25zIGFyZSBu b3Qgc2VsZWN0ZWQgYmVjYXVzZSBpdCBpbmN1cnMgYSAodGlueSkgZXh0cmEgcHJvY2Vzc2lu ZyBwZW5hbHR5IHRvIHRoZSBjaGVja3MuIFRoZXJlZm9yZSBpZiB5b3Ugd2FudCB0byBtb25p dG9yIGZvciBhZGRpdGlvbnMsIHlvdSBuZWVkIHRvIG9wdC1pbi48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+RmlsZSBsb2NhdGlvbnM8L3NwYW4+IDogY29tbWEtc2VwYXJhdGVk IGxpc3Qgb2YgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd2lzaCB0byBiZSBhYmxlIHRv IHNlbGVjdCBmaWxlcyBmb3IgbW9uaXRvcmluZy4gQ2hvb3NlIG9ubHkgdGhlIHRvcC1sZXZl bCBmb2xkZXI7IGV2ZXJ5dGhpbmcgYmVuZWF0aCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2Vs ZWN0ZWQuIEl0IGRlZmF1bHRzIHRvIHlvdXIgc2l0ZSByb290LiBJZiB1c2luZyBhIG11bHRp LXNpdGUgc2V0dXAgeW91IG1heSBoYXZlIHRvIGFsdGVyIHRoaXMuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkV4Y2x1ZGUgZm9sZGVyczwvc3Bhbj4gOiBzaW5jZSB0aGUgbGlz dCBvZiBmaWxlcyB1bmRlciB5b3VyIFRleHRwYXR0ZXJuIGluc3RhbGxhdGlvbiBtYXkgcG90 ZW50aWFsbHkgYmUgbGFyZ2UgeW91IGNhbiBkZXNpZ25hdGUgc29tZSBmb2xkZXJzIHRvIGJl IGF1dG9tYXRpY2FsbHkgZXhjbHVkZWQsIHdoaWNoIG1ha2VzIHRoZSBmaWxlIGxpc3Qgc2hv cnRlci4gRGVmYXVsdDogPGNvZGU+aW1hZ2VzLCBmaWxlcywgdG1wPC9jb2RlPi48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+SWdub3JlIGZpbGVzPC9zcGFuPiA6IHNvbWUgZmls ZXMsIHN1Y2ggYXMgdGhlIGVycm9yX2xvZyBmaWxlIG9uIHR5cGljYWwgTGludXggaG9zdHMs IHBvcCB1cCB1bmFubm91bmNlZCBhbmQgeW91IG1heSBwZXJpb2RpY2FsbHkgZGVsZXRlIHRo ZW0uIE9uIGRldmVsb3BtZW50IHNpdGVzIHRoaXMgY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBhbGFy bXMgZHVyaW5nIGRlYnVnZ2luZy4gVG8gbWluaW1pc2UgdGhpcywgeW91IGNhbiBsaXN0IGZp bGVzIGhlcmUgdGhhdCB5b3UgYWx3YXlzIHdpc2ggdG8gaWdub3JlLiBObyBwYXRocyBhcmUg bmVjZXNzYXJ5OiBqdXN0IHN1cHBseSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGUg bmFtZXMuIFdpbGRjYXJkcyAoKiBhbmQgPykgYXJlIHBlcm1pc3NhYmxlLiBOb3RlIHRoYXQg dGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEg c3BlY2lhbCBjYXNlIHNvIHRoZXJlJiM4MjE3O3Mgbm8gbmVlZCB0byBsaXN0IGl0IGV4cGxp Y2l0bHkuPC9saT4KCTwvdWw+CgoJPGgzPlBsdWdpbiBvcHRpb25zPC9oMz4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5SZXN0cmljdCBwcm9nbm9zdGljcyBjb25maWcgdG88 L3NwYW4+IDogaWYgeW91IGhhdmUgdG8gaXNzdWUgUHVibGlzaGVyIC8gTWFuYWdpbmcgRWRp dG9yIHByaXZzIHRvIHNvbWVvbmUgZWxzZSBhcyB3ZWxsIGFzIHlvdXJzZWxmIGJ1dCBkb24m IzgyMTc7dCB3YW50IGFueW9uZSBtZXNzaW5nIHdpdGggdGhlIHBsdWdpbiBzZXR0aW5ncywg cHV0IGEgbGlzdCBvZiBwZXJtaXR0ZWQgdXNlciBuYW1lcyBpbiB0aGlzIGJveC4gPHNwYW4g Y2xhc3M9ImltcG9ydGFudCI+QmUgY2FyZWZ1bC4gVGhlIG5hbWVzIGFyZSBjYXNlLXNlbnNp dGl2ZSBhbmQgaWYgeW91IG1pc3NwZWxsIGEgbmFtZSB5b3UgY2FuIGxvY2sgeW91cnNlbGYg b3V0IG9mIGVkaXRpbmcgdGhlIHNldHRpbmdzITwvc3Bhbj48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+QWRtaW4tc2lkZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPjwv c3Bhbj4gOiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gb2YgeW91ciAmIzgy MTY7dGV4dHBhdHRlcm4mIzgyMTc7IGFkbWluIHNpZGUuIFRoaXMgaXMgdXN1YWxseSA8Y29k ZT5odHRwOi8vc2l0ZS5jb20vdGV4dHBhdHRlcm48L2NvZGU+IGJ1dCBpZiB5b3UgYXJlIHJ1 bm5pbmcgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9tdWx0aXNpdGUiPm11bHRpLXNpdGU8L2E+ IG9yIGhhdmUgb3RoZXJ3aXNlIGFsdGVyZWQgdGhlIGRpcmVjdG9yeSB5b3UgY2FuIHNwZWNp ZnkgaXQgaGVyZS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UHJvZ25vc3RpY3Mg ZGlyPC9zcGFuPiA6IFRoZSBmb2xkZXIgd2hlcmUgdGhlIHByb2dub3N0aWNzIGNoZWNrc3Vt cyBmaWxlIHdpbGwgcmVzaWRlLiBUaGUgZGlyZWN0b3J5IG11c3QgYWxyZWFkeSBleGlzdCBh bmQgYmUgd3JpdGFibGUgb3IgeW91ciBjaG9zZW4gbG9jYXRpb24gd2lsbCBiZSBpZ25vcmVk LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5VbmlxdWUgcHJlZml4PC9zcGFuPiA6 IHByZWZpeCB0aGUgY2hlY2tzdW1zIGZpbGUgd2l0aCB0aGlzIHN0cmluZy4gVXNlZnVsIHRv IGF2b2lkIGZpbGVzIGNsYXNoaW5nIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHNhbWUgKG5vbi1k b2Nyb290KSBmb2xkZXIgdG8gc3RvcmUgdGhlIGNoZWNrc3VtcyBmcm9tIG1vcmUgdGhhbiBv bmUgc2l0ZS48L2xpPgoJPC91bD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9ob3dpdHdvcmtz Ij5Ib3cgaXQgd29ya3M8L2gyPgoKCTxwPklkZWFsbHksIHRoZSBwbHVnaW4gd291bGQgYmUg YSB0aW1lZCBzY3JpcHQgdGhhdCBydW5zIGV2ZXJ5IE4gc2Vjb25kcy4gQnV0IHRoYXQgcmVx dWlyZXMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIHNvZnR3YXJlIChjcm9uKSBvbiB5b3VyIGhv c3QgYW5kIHRoZXJlJiM4MjE3O3Mgbm8gZ3VhcmFudGVlIGl0IGV4aXN0cy4gVGh1cyB0aGUg b25seSB0aGluZyB0aGF0IGNhbiAmIzgyMTY7dHJpZ2dlciYjODIxNzsgdGhlIHBsdWdpbiBp cyBUZXh0cGF0dGVybiBpdHNlbGYuIFRoZSBwbHVnaW4gcnVucyBldmVyeSB0aW1lIHlvdSBp bnRlcmFjdCB3aXRoIHRoZSBhZG1pbiBzaWRlLCBidXQgaWYgaXQgY2hlY2tlZCBhbGwgdGhl IGZpbGVzIGFnYWluc3QgYWxsIHRoZSBjaGVja3N1bXMgeW91IGhhdmUgY2hvc2VuIG9uIGV2 ZXJ5IGNsaWNrLCB5b3VyIGFkbWluIHNpZGUgd291bGQgc2xvdyBkb3duIGEgbG90LiBUaGUg Y29tcHJvbWlzZSBpcyB0byBzcGVjaWZ5IGEgdGltZW91dCB2YWx1ZSBhbmQgYSBudW1iZXIg b2YgZmlsZXMgdG8gY2hlY2suIFRoaXMgaXMgaG93IGl0IHdvcmtzOjwvcD4KCgk8b2w+CgkJ PGxpPldoZW4geW91IGNsaWNrIGEgdGFiIG9yIGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNp ZGUsIHRoZSBwbHVnaW4gbG9va3MgYXQgd2hlbiB5b3UgPGVtPmxhc3Q8L2VtPiBjbGlja2Vk IHNvbWV0aGluZyBhbmQgYXNrcyAmIzgyMjA7aXMgaXQgZ3JlYXRlciB0aGFuIE4gKHNlY29u ZHMpPyYjODIyMTsgd2hlcmUgTiBpcyB0aGUgdmFsdWUgb2YgPGNvZGU+Q2hlY2sgZmlsZXMg KGF0IG1vc3QpIGV2ZXJ5PC9jb2RlPiBvbiB0aGUgU2V0dXAgcGFuZWwuIEl0IGFsc28gY2hl Y2tzIGlmIHRoZSBjdXJyZW50IHRpbWUgb2YgZGF5IGlzIGJldHdlZW4gdGhlIHZhbHVlcyBz cGVjaWZpZWQgaW4gPGNvZGU+Q2hlY2sgZmlsZXMgYmV0d2VlbjwvY29kZT48L2xpPgoJCTxs aT5JZiBzbywgaXQgZ3JhYnMgYXMgbWFueSBmaWxlcyBhcyB5b3UgaGF2ZSBzcGVjaWZpZWQg aW4gPGNvZGU+Q2hlY2sgdGhpcyBtYW55IGZpbGVzIGVhY2ggdGltZTwvY29kZT4sIHRlc3Rz IHRoZW0gYW5kIHJlc2V0cyB0aGUgdGltZXIuIEl0IGtlZXBzIGEgbm90ZSBvZiBob3cgZmFy IGl0IGhhcyB3b3JrZWQgdGhyb3VnaCB5b3VyIGxpc3Qgb2YgZmlsZXMgYW5kIGNvbnRpbnVl cyB3aGVyZSBpdCBsZWZ0IG9mZiBuZXh0IHRpbWUgaXQgcnVuczwvbGk+CgkJPGxpPklmIHRo ZSB2YWx1ZSBvZiBOIGhhcyBub3QgeWV0IGJlZW4gcmVhY2hlZCwgaXQgZG9lcyBub3RoaW5n LCB0aHVzIHNhdmluZyB5b3UgcHJlY2lvdXMgcHJvY2Vzc29yIGN5Y2xlczwvbGk+Cgk8L29s PgoKCTxwPkFsbCB0aGF0IGlzIGdyZWF0IGlmIHlvdSYjODIxNztyZSBjb250aW51YWxseSB1 c2luZyB0aGUgYWRtaW4gc2lkZSBhbmQgcHJvZHVjaW5nIGNsaWNrcyBmb3IgdGhlIHBsdWdp biB0byBydW4uIEJ1dCBvbmNlIHlvdSBoYW5kIG92ZXIgdGhlIHNpdGUgdG8geW91ciBjbGll bnQsIHRoZXkgbWF5IG5vdCB1c2UgdGhlIGFkbWluIHNpZGUgYXMgb2Z0ZW4gYXMgeW91ICYj ODIxMjsgaWYgYXQgYWxsLiBUaHVzIHlvdXIgZmlsZXMgd291bGQgcmFyZWx5L25ldmVyIGJl IGNoZWNrZWQuIFRvIGNvdW50ZXJhY3QgdGhpcywgeW91IGNhbiBhc2sgdGhlIHBsdWdpbiB0 byByZXNwb25kIHRvIHB1YmxpYyBzaWRlIGNsaWNrcyBhcyB3ZWxsIHNvIHRoYXQgYW55IHRp bWUgYSB2aXNpdG9yIChvciBib3QpIGNyYXdscyB5b3VyIHBhZ2VzIHRoZSBwbHVnaW4gcnVu cywgY2hlY2tzIGlmIHRoZSB0aW1lb3V0IGhhcyBiZWVuIGV4Y2VlZGVkIGFuZCwgaWYgc28s IGNoZWNrcyBzb21lIGZpbGVzIGFuZCByZXNldHMgdGhlIHRpbWVyIChleGFjdGx5IGFzIGl0 IHdvdWxkIGRvIG9uIHRoZSBhZG1pbiBzaWRlKS48L3A+CgoJPHA+VGhpcyB3aWxsIHB1c2gg dGhlIHByb2Nlc3NpbmcgbG9hZCBvbnRvIHlvdXIgcHVibGljIHNpdGUsIGJ1dCBzaW5jZSBp dCYjODIxNztzIG9ubHkgcnVuIGF0IG1vc3Qgb25jZSBldmVyeSBOIHNlY29uZHMgYW5kIHlv dSBzcGVjaWZ5IGhvdyBtYW55IGZpbGVzIHRvIHJlYWQgZWFjaCB0aW1lLCB5b3UgY2FuIGNv bnRyb2wgaG93IG11Y2ggb2YgYW4gaW1wYWN0IGl0IGhhcyBieSBtYXRjaGluZyB0aGF0IHdp dGggeW91ciBkZXNpcmUgdG8ga25vdyAmIzgyMTY7aW5zdGFudGx5JiM4MjE3OyB0aGF0IHNv bWV0aGluZyBoYXMgY2hhbmdlZCB2ZXJzdXMgdGhlIHZvbHVtZSBvZiB0cmFmZmljIC8gdmlz aXRvcnMgdG8gdGhlIHNpdGUgYW5kIGhvdyBvZnRlbiB5b3Ugd2FudCB0byBkZWxheSB0aGVp ciBicm93c2luZy48L3A+CgoJPHA+VGhlIGdvb2QgdGhpbmcgYWJvdXQgYmVpbmcgYWJsZSB0 byBzcGVjaWZ5IGJvdGggdGhlIHRpbWVvdXQsIHRoZSB0aW1lIG9mIGRheSBhbmQgdGhlIHF1 YW50aXR5IG9mIGZpbGVzIGlzIHRoYXQgeW91IGNhbiBkZXRlcm1pbmUgaWYgdGhlIHBsdWdp biBydW5zICYjODIxNjtsaXR0bGUgYW5kIG9mdGVuJiM4MjE3OyBvciB0YWtlcyBtb3JlIG9m IHlvdXIgcmVzb3VyY2VzIHdoZW4gaXQgcnVucyBsZXNzIGZyZXF1ZW50bHkgb3IgZHVyaW5n IG9mZi1wZWFrIHRpbWVzLiBUaGUgcmVjb21tZW5kYXRpb24gaXMgdG8gcnVuIGZhaXJseSBm cmVxdWVudGx5ICYjODIxMjsgYmV0d2VlbiAxMCBhbmQgNjAgc2Vjb25kcyBpcyBnb29kICYj ODIxMjsgYW5kIG9ubHkgcHJvY2Vzc2luZyBhIHNtYWxsIG51bWJlciBvZiBmaWxlcywgc2F5 IDIwIG9yIDMwIGVhY2ggdGltZS48L3A+CgoJPHA+QXMgYW4gZXhhbXBsZSwgaWYgeW91IG1v bml0b3JlZCBldmVyeSBmaWxlIGluIGEgc3RvY2sgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gaW5zdGFsbGF0aW9uIHdpdGggYSB0ZW4tc2Vjb25kIHRpbWVvdXQgYW5kIGNoZWNr ZWQgMzAgZmlsZXMgZWFjaCB0aW1lLCB0aGVuICYjODIxMjsgYXNzdW1pbmcgeW91IGhhZCBh dCBsZWFzdCBmaXZlIGNsaWNrcyBwZXIgbWludXRlICYjODIxMjsgeW91IHdvdWxkIGN5Y2xl IHRocm91Z2ggdGhlbSBpbiB1bmRlciBhIG1pbnV0ZS4gQW5kIHlvdXIgdmlzaXRvcnMgcHJv YmFibHkgd29uJiM4MjE3O3Qgbm90aWNlIHRoZSBkZWxheS4gSWYgeW91IGhhdmUgZmV3ZXIg dGhhbiBmaXZlIGNsaWNrcyBwZXIgbWludXRlIHRoZW4gaXQgd2lsbCB0YWtlIGxvbmdlciB0 byBjeWNsZSB0aHJvdWdoIHRoZSBmaWxlcyBhbmQgdGhlIGNoYW5jZSBvZiBjYXRjaGluZyBj aGFuZ2VzIGFzIHRoZXkgaGFwcGVuIHJlZHVjZXMuIEJ1dCBpZiB5b3UgcnVuIHRvbyBvZnRl biAoc2F5LCBldmVyeSBvbmUgb3IgdHdvIHNlY29uZHMpIHlvdSBhcmUgd2FzdGluZyB5b3Vy IHZpc2l0b3JzJiM4MjE3OyB0aW1lLCB5b3VyIHNlcnZlciYjODIxNztzIHJlc291cmNlcyBh bmQgaW5jcmVhc2luZyB0aGUgY2hhbmNlIG9mIHRoZSBwbHVnaW4gbWlzaW5mb3JtaW5nIHlv dSBvZiBhbHRlcmF0aW9ucyAoaXQgbWF5IHN0aWxsIGJlIHBhcnR3YXkgdGhyb3VnaCB0aGUg cHJldmlvdXMgcnVuIHdoZW4gdGhlIG5leHQgb2NjdXJzIGFuZCB0cmlnZ2VyIGEgd2Fybmlu ZykuPC9wPgoKCTxwPlRoZSBwbHVnaW4gaXMgd3JpdHRlbiB0byBiZSBhcyBxdWljayBhbmQg ZWZmaWNpZW50IGFzIGl0IHBvc3NpYmx5IGNhbiB0byBhdm9pZCBhbnkgZGVsYXlzOyB0aGVy ZSBtYXkgYmUgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9iZXR0ZXIiPnJvb20gZm9yIGltcHJv dmVtZW50PC9hPiBvZiBjb3Vyc2UhIFBsZWFzZSBiZSBhd2FyZSB0aGF0IG5vIGRldGVjdGlv biBzeXN0ZW0gaXMgZm9vbHByb29mIGFuZCB0aGVyZSBpcyBubyBzdWJzdGl0dXRlIGZvciB2 aWdpbGFuY2UgYW5kIDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfcHdzdHJlbmd0aCI+Z29vZCBw YXNzd29yZHM8L2E+IDotKTwvcD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9tb25maWxlcyI+ TW9uaXRvcmluZyBmaWxlczwvaDI+CgoJPHA+Q2xpY2tpbmcgdGhlIDxlbT5GaWxlczwvZW0+ IGJ1dHRvbiB0YWtlcyB5b3UgdG8gYSBzY3JlZW4gd2l0aCBhIHRleHRhcmVhIGluIGl0IHRo YXQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3Iu IEEgY291bnQgb2YgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIG1vbml0b3JlZCBmaWxlcyBpcyBz aG93biBhdCB0aGUgdG9wLCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgZmlsZXMgYXZhaWxh YmxlIGluIHlvdXIgY2hvc2VuIGZpbGUgbG9jYXRpb24ocykuIFRoZSBmb2xsb3dpbmcgZmls ZXMgd2lsbCBiZSBpbiB0aGUgbGlzdDo8L3A+CgoJPG9sPgoJCTxsaT5hbGwgZmlsZXMgaW4g YWxsIHN1YmRpcmVjdG9yaWVzIGZyb20gYWxsIDxjb2RlPkZpbGUgbG9jYXRpb25zPC9jb2Rl PiB5b3Ugc3BlY2lmaWVkIHRvIG1vbml0b3IgaW4gdGhlIFNldHVwIHNjcmVlbjwvbGk+CgkJ PGxpPjxlbT5leGNlcHQ8L2VtPiBhbnkgZmlsZXMgYmVsb3cgdGhlIGRpcmVjdG9yaWVzIHlv dSBjaG9zZSB0byBleGNsdWRlPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwvZW0+IGFueSBmaWxl IG5hbWVzIHlvdSBleHBsaWNpdGx5IGNob3NlIHRvIGlnbm9yZTwvbGk+CgkJPGxpPjxlbT5l eGNlcHQ8L2VtPiB0aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGU8L2xpPgoJPC9vbD4K Cgk8cD5BdCBmaXJzdCwgbm8gZmlsZXMgd2lsbCBiZSBzZWxlY3RlZCBzbyB5b3Ugd2lsbCBi ZSBtb25pdG9yaW5nIG5vdGhpbmcuIENob29zZSB3aGljaCBmaWxlcyB5b3Ugd2lzaCB0byBt b25pdG9yIGFuZCBzYXZlIHRoZSBjaGFuZ2VzLiBUaGUgcGx1Z2luIHdpbGwga2VlcCB0YWJz IG9uIHRob3NlIGZpbGVzLjwvcD4KCgk8cD5JZiB5b3UgaGF2ZSBlbGVjdGVkIHRvIHdhdGNo IGZvciBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgc3lzdGVtLCBhbnkgZmlsZXMgaW4gYW55IG9m IHlvdXIgY2hvc2VuIGxvY2F0aW9ucyB0aGF0IGFyZSBub3QgY3VycmVudGx5IGluIHRoZSBs aXN0IGF0IHRoZSB0aW1lIHlvdSBoaXQgPGVtPlNhdmU8L2VtPiAocmVnYXJkbGVzcyBvZiB3 aGV0aGVyIHlvdSBhcmUgbW9uaXRvcmluZyB0aGVtIG9yIG5vdCkgd2lsbCB0cmlnZ2VyIGFu IGFsYXJtLiBHbyBhaGVhZCBhbmQgdHJ5IGl0OiBhZGQgc29tZSBmaWxlcyB0byB5b3VyIHNl cnZlciBvciBpbnN0YWxsIGEgbmV3IHRoZW1lIG9yIHNvbWV0aGluZyBhbmQgdGhlIHBsdWdp biB3aWxsIHRlbGwgeW91LjwvcD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9hY2siPkFja25v d2xlZGdpbmcgYWxhcm1zPC9oMj4KCgk8cD5JZiBvbmUgb3IgbW9yZSBmaWxlcyBhcmUgYWx0 ZXJlZCwgZGVsZXRlZCwgb3IgbmV3IGZpbGVzIGhhdmUgYmVlbiBhZGRlZCAoZGVwZW5kaW5n IG9uIHdoaWNoIGFjdGlvbnMgeW91IGhhdmUgZWxlY3RlZCB0byBtb25pdG9yKSB0aGUgcGx1 Z2luIHdpbGwgZGV0ZWN0IHRoaXMgd2hlbiB0aGUgbmV4dCBhZG1pbi0gb3IgcHVibGljLXNp ZGUgY2xpY2sgaXMgcmVjZWl2ZWQgYW5kIHRoZSB0aW1lb3V0IGN5Y2xlIGlzIGV4Y2VlZGVk LiBJdCB3aWxsIHRoZW4gdGFrZSB0aGUgYWN0aW9uIHlvdSBjaG9zZS4gTm90ZSBvZiBjb3Vy c2UgdGhhdCB5b3Ugd29uJiM4MjE3O3Qgc2VlIHRoZSBhZG1pbi1zaWRlIHdhcm5pbmcgaWYg bm90IGxvZ2dlZCBpbiE8L3A+CgoJPHA+VGhlIG1lc3NhZ2UgZGVsaXZlcmVkIHRvIHlvdSBj b250YWlucyBhIGxpbmsgdG8gdGhlIEFja25vd2xlZGdlbWVudCBwYWdlICh3aGljaCBjYW4g YWxzbyBiZSByZWFjaGVkIGJ5IGNsaWNraW5nIHRoZSA8ZW0+QWxhcm1zPC9lbT4gYnV0dG9u IGZyb20gdGhlIFByb2dub3N0aWNzIHRhYikuIFlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBs aXN0IG9mIGFsbCB0aGUgZmlsZXN5c3RlbSBhbHRlcmF0aW9ucy4gSWYgeW91IGtub3cgYWJv dXQgdGhlIGNoYW5nZXMgJiM4MjEyOyBlLmcuIHlvdSBpbml0aWF0ZWQgdGhlbSBieSB1cGxv YWRpbmcgc29tZSBuZXcgZmlsZSB2ZXJzaW9uKHMpICYjODIxMjsgdGhlbiB5b3UgY2FuIGFj a25vd2xlZ2RlIHRoaXMgYnkgcGxhY2luZyBhIGNoZWNrIG1hcmsgbmV4dCB0byB0aGUgZmls ZXMgeW91IGtub3cgY29udGFpbiBsZWdpdGltYXRlIGFsdGVyYXRpb25zLiBXaGVuIHlvdSBj bGljayB0aGUgPGVtPkFja25vd2xlZGdlPC9lbT4gYnV0dG9uIHlvdSBzaWduaWZ5IHRvIHRo ZSBwbHVnaW4gdGhhdCB5b3UgYWNjZXB0IHRoZSBjaGFuZ2VzLiBUaHVzIHRoZSBuZXcgZmls ZShzKSBiZWNvbWUgdGhlIGJhc2VsaW5lLjwvcD4KCgk8cD5JZiB5b3UgYXJlIG1vbml0b3Jp bmcgZmlsZSBzeXN0ZW0gYWRkaXRpb25zLCB0aGUgYWN0IG9mIGFja25vd2xlZGdpbmcgdGhl IGFsYXJtIGluZGljYXRlcyB0aGF0IHlvdSBhcmUgaGFwcHkgZm9yIHRoZSBuZXcgZmlsZShz KSB0byBiZSBtb25pdG9yZWQuIFRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIHRv IHRoZSBsaXN0IG9mIEZpbGVzIHRvIG1vbml0b3IgKHlvdSBjYW4gdmVyaWZ5IHRoaXMgYnkg dmlzaXRpbmcgdGhlIFByb2dub3N0aWMgdGFiJiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4gbGlz dCkuIElmIHlvdSBrbm93IGFib3V0IHNvbWUgb2YgdGhlIGZpbGVzIChwZXJoYXBzIHRoZXkg YXJlIG5ldyBhZGRpdGlvbnMpIGFuZCB5b3UgZG9uJiM4MjE3O3Qgd2FudCB0byBtb25pdG9y IHRoZW0sIHNlbGVjdCB0aGUgZmlsZShzKSBhbmQgY2xpY2sgPGVtPklnbm9yZTwvZW0+LiBU aGUgYWxhcm0gd2lsbCBiZSBhY2tub3dsZWRnZWQgYnV0IHlvdSB3aWxsIG5vdCBiZSBtb25p dG9yaW5nIHRoZSBmaWxlKHMpLjwvcD4KCgk8cD5JZiB5b3UgY2hvb3NlIG5vdCB0byBhY2tu b3dsZWRnZS9pZ25vcmUgc29tZSBvciBhbGwgb2YgdGhlIGZpbGVzLCB5b3Ugd2lsbCBjb250 aW51ZSB0byBiZSBuYWdnZWQgYXQgeW91ciBkZXNpZ25hdGVkIGFsYXJtIGZyZXF1ZW5jeSB1 bnRpbCB5b3UgYWNrbm93bGVkZ2UgdGhlIHByb2JsZW1zIG9yIGZpeCB0aGUgZmlsZXN5c3Rl bSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuIERvIGJlYXIgaW4gbWluZCB3aGVuIGNvbmZpZ3Vy aW5nIHRoZSBmcmVxdWVuY3kgdGhhdCBhbGVydGluZyB0b28gb2Z0ZW4gY2FuIGFsaWVuYXRl IHVzZXJzIGFuZCBtYWtlIGFuIGFsYXJtIHNpdHVhdGlvbiBsZXNzIGVmZmVjdGl2ZS48L3A+ CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfY3NpIj5Gb3JlbnNpY3M8L2gyPgoKCTxwPjxzdHJv bmc+QmVmb3JlPC9zdHJvbmc+IGFja25vd2xlZGdpbmcgYWxhcm1zLCB5b3UgbWF5IGNob29z ZSB0byBzZW5kIG9mZiBmb3JlbnNpY3MgaW5mb3JtYXRpb24gdG8gYSBkZXNpZ25hdGVkIGUt bWFpbCBhZGRyZXNzLiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIHNlbnQ6PC9wPgoK CTx1bD4KCQk8bGk+RmlsZSBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGNoYW5nZWQvYWRkZWQg ZmlsZSwgc3VjaCBhcyBpdHMgc2l6ZSwgbW9kaWZpY2F0aW9uIHRpbWUsIGFuZCB1c2VyIC8g Z3JvdXAgb3duZXJzaGlwPC9saT4KCQk8bGk+VGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0 aGVtc2VsdmVzLCA8c3BhbiBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bhbj4tNjQgZW5jb2RlZCBp biB0aGUgYm9keSBvZiB0aGUgZS1tYWlsPC9saT4KCQk8bGk+VGhlIG5hbWVzICZhbXA7IHBh dGhzIG9mIGFueSBkZWxldGVkIGZpbGVzPC9saT4KCQk8bGk+QW55IDxzcGFuIGNsYXNzPSJj YXBzIj5UWFA8L3NwYW4+IGxvZyBlbnRyaWVzIHRoYXQgb2NjdXJyZWQgZWl0aGVyIHNpZGUg b2YgdGhlIGFsYXJtIGNvbmRpdGlvbiAoPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g bG9nZ2luZyBtdXN0IGJlIGVuYWJsZWQgaW4geW91ciA8ZW0+QWRtaW4gLSZndDsgUHJlZmVy ZW5jZXM8L2VtPik8L2xpPgoJPC91bD4KCgk8cD5Zb3UgY2FuIHNlbGVjdCB3aGljaCBmaWxl IGluZm9ybWF0aW9uIHRvIHNlbmQgb2ZmIHZpYSB0aGUgY2hlY2sgYm94ZXMuIFRoZSBvbmVz IHlvdSBzZWxlY3RlZCB3aWxsIHJlbWFpbiBzZWxlY3RlZCBmb3IgY29udmVuaWVuY2UgYWZ0 ZXIgdGhlIGZvcmVuc2ljcyBoYXZlIGJlZW4gc2VudCwgc28geW91IG1heSBpbW1lZGlhdGVs eSBoaXQgPGVtPkFja25vd2xlZGdlPC9lbT4gdG8gYWNrbm93bGVkZ2UgdGhlIG9uZXMgeW91 IG5vdGlmaWVkLjwvcD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9hZHZpY2UiPkFkdmljZTwv aDI+CgoJPHA+Q2xpY2tpbmcgdGhlIDxlbT5BZHZpY2U8L2VtPiBidXR0b24gd2lsbCBydW4g dGhyb3VnaCBhIHNlcmllcyBvZiBjaGVja3MgYW5kIG9mZmVyIHN1Z2dlc3Rpb25zIG9uIGhv dyB0byBoYXJkZW4geW91ciBpbnN0YWxsYXRpb24uIFRoZSBtb3N0IGltcG9ydGFudCBvbmUg dG8gZm9sbG93IGlzIGlmIHlvdSBhcmUgd2FybmVkIGFib3V0IHRoZSBwcm9nbm9zdGljcyBj aGVja3N1bXMgZmlsZSBiZWluZyBpbiBkb2Nyb290LiBJdCBpcyBoaWdobHkgcmVjb21tZW5k ZWQgdG8gbW92ZSBpdCBzb21ld2hlcmUgbm9uLXdlYiBhY2Nlc3NpYmxlLjwvcD4KCgk8aDIg aWQ9InNtZF9wcm9naGVscF9wd3N0cmVuZ3RoIj5QYXNzd29yZCBzdHJlbmd0aDwvaDI+CgoJ PHA+QXMgYW4gYWlkIHRvIHlvdXIgdXNlcnMsIGEgcGFzc3dvcmQgc3RyZW5ndGggbWV0ZXIg aXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBvbiB0aGUgPGVtPkFkbWluIC0mZ3Q7IFVzZXJz PC9lbT4gdGFiLiBXaGVuIHlvdSB0eXBlIHRvIGNoYW5nZSB5b3VyIHBhc3N3b3JkLCBhbiBp bmRpY2F0aW9uIG9mIHRoZSB0aW1lIGEgY3VycmVudCBkZXNrdG9wIFBDIHdvdWxkIHRha2Ug dG8gY3JhY2sgaXQgaXMgZ2l2ZW4uIEl0JiM4MjE3O3MgYSB2ZXJ5IHJvdWdoIGNhbGN1bGF0 aW9uLCBhbHRob3VnaCBNb29yZSYjODIxNztzIExhdyBpcyBhdXRvbWF0aWNhbGx5IHRha2Vu IGludG8gYWNjb3VudCAodGh1cyB5b3VyIHBhc3N3b3JkIHdpbGwgYmVjb21lIHdlYWtlciBv dmVyIHRpbWUgaWYgeW91IGRvIG5vdCBjaGFuZ2UgaXQpLjwvcD4KCgk8cD5Zb3Ugd2lsbCBk byB5b3Vyc2VsZiBhbmQgeW91ciBzeXN0ZW0gYSBodWdlIGZhdm91ciB0byBjaG9vc2UgYSBw YXNzcGhyYXNlIHRoYXQgdGFrZXMgaW4gZXhjZXNzIG9mIGEgZmV3IHRob3VzYW5kIHllYXJz IHRvIGNyYWNrLiBUaGUgbG9uZ2VyIHRoZSBiZXR0ZXIuIFJlbWVtYmVyIHRoaXMgaXMgYmFz ZWQgb24gYSBicnV0ZSBmb3JjZSBhdHRhY2sgdXNpbmcgYSBzaW5nbGUgZGVza3RvcCBQQyAm IzgyMTI7IG5vdCBhIG1haW5mcmFtZSBvciBhIFBDIGZhcm0gJiM4MjEyOyBhbmQgaXQgZG9l cyBub3QgdGFrZSBpbnRvIGFjY291bnQgaG93IGVhc3kgdGhlIHBhc3N3b3JkIGlzIHRvIGd1 ZXNzIGlmIHlvdSB1c2UgZGljdGlvbmFyeSB3b3JkcyBvciA8YSBocmVmPSJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vYmxvZy9jaG9vc2luZy1hLWJyaWxsaWFudC1wYXNzd29yZCI+c29tZSBv dGhlciBiYWQgcGFzc3dvcmQ8L2E+LiBDaG9vc2UgYSBnb29kIG9uZSBhbmQgeW91IDxzdHJv bmc+c2lnbmlmaWNhbnRseTwvc3Ryb25nPiByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGEg c3VjY2Vzc2Z1bCBhdHRhY2suPC9wPgoKCTxoMiBpZD0ic21kX3Byb2doZWxwX2NhbGxiYWNr cyI+Q2FsbGJhY2tzPC9oMj4KCgk8cD5UaGUgcGx1Z2luIGhhcyBhIGNhbGxiYWNrIG9mIGl0 cyBvd24gYWxsb3dpbmcgeW91IHRvIHBlcmZvcm0gY3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBz Ij5TUUw8L3NwYW4+IGluamVjdGlvbiB0ZXN0cy4gSG9vayB5b3VyIG93biBjb2RlIGludG8g aXQgYnkgcmFpc2luZyBhIGNhbGxiYWNrIG9uIHRoZSBldmVudCA8Y29kZT5zbWRfcHJvZ25v c3RpY3M8L2NvZGU+IGFuZCBzdGVwIDxjb2RlPnNxbF9pbmplY3Rpb248L2NvZGU+LiBUaGlz IGNhbGxiYWNrIGZpcmVzIG9uIGV2ZXJ5IHBhZ2UgYWNjZXNzIGlmIDxjb2RlPlByb3RlY3Qg YWdhaW5zdCBTUUwgaW5qZWN0aW9uPC9jb2RlPiBpcyBlbmFibGVkLjwvcD4KCgk8cD5Zb3Vy IGNvZGUgY2FuIHJldHVybjo8L3A+CgoJPHVsPgoJCTxsaT4tMSB0byBhc3NlcnQgJiM4MjIw O25vIGluamVjdGlvbiBkZXRlY3RlZCBhdCBhbGwgYW5kIGRvIG5vdCBydW4gdGhlIHBsdWdp biYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGNoZWNrcyYjODIyMTs8 L2xpPgoJCTxsaT4wIHRvIGFzc2VydCAmIzgyMjA7bm8gaW5qZWN0aW9uIGRldGVjdGVkIGJ1 dCBydW4gdGhlIHBsdWdpbiBjaGVja3MgYXMgd2VsbCYjODIyMTs8L2xpPgoJCTxsaT4xIHRv IGFzc2VydCAmIzgyMjA7aW5qZWN0aW9uIGRldGVjdGVkJiM4MjIxOyAocGx1Z2luIGNoZWNr cyBhcmUgYnlwYXNzZWQpPC9saT4KCTwvdWw+CgoJPHA+SW4gYWxsIGNhc2VzLCB0aGUgcGx1 Z2luIHdpbGwgY29udGludWUgdG8gcHJvY2VzcyBmb3JlbnNpY3MgZXZpZGVuY2UgYW5kIDxz cGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiByZWRpcmVjdGlvbiBpZiB0aGUgb3B0aW9u cyBhcmUgZW5hYmxlZC4gQmFpbCBvdXQgd2l0aCBhbiA8Y29kZT5leGl0KCk8L2NvZGU+IG9y IDxjb2RlPnR4cF9kaWUoKTwvY29kZT4gaWYgeW91IHdpc2ggdGhlIHBsdWdpbiB0byB0ZXJt aW5hdGUgaW5zdGVhZC48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfbXVsdGlzaXRlIj5N dWx0aS1zaXRlIHNldHVwPC9oMj4KCgk8cD5JZiB5b3UgYXJlIHVzaW5nIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgbXVsdGktc2l0ZSBmZWF0dXJlIHRoZXJlIGFy ZSBzb21lIGFkZGl0aW9uYWwgdGhpbmdzIHRvIG5vdGU6PC9wPgoKCTxvbD4KCQk8bGk+WW91 IHNob3VsZCBzZXQgc21kX3Byb2dub3N0aWNzIHVwIG9uIDxlbT5lYWNoPC9lbT4gZG9tYWlu IHlvdSB3aXNoIHRvIHByb3RlY3QgdG8gYXZvaWQgb3ZlcmxvYWRpbmcgb25lIGRvbWFpbiB3 aXRoIGNoZWNraW5nIHRoZW0gYWxsPC9saT4KCQk8bGk+Q2hvb3NlIGp1c3Qgb25lIG9mIHlv dXIgZG9tYWlucyBhcyB0aGUgJiM4MjE2O21hc3RlciYjODIxNzsgd2hpY2ggd2lsbCBtb25p dG9yIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBjb3JlIGZpbGVzPC9saT4K CQk8bGk+Q29uc2lkZXIgbW92aW5nIGFsbCB0aGUgZG9tYWlucyBpbiB0aGUgPGNvZGU+L3Np dGVzPC9jb2RlPiBmb2xkZXIgb3V0c2lkZSBkb2Nyb290PC9saT4KCQk8bGk+RW5zdXJlIHlv dSBlbXBsb3kgYSA8Y29kZT5VbmlxdWUgcHJlZml4PC9jb2RlPiBvciB5b3VyIGNoZWNrc3Vt cyBmaWxlcyB3aWxsIGNsYXNoLCBjYXVzaW5nIG9kZCBiZWhhdmlvdXIuIFRoZSByZWNvbW1l bmRlZCBtZXRob2QgaXMgdG8gdXNlIHRoZSA8Y29kZT5Qcm9nbm9zdGljcyBmb2xkZXI8L2Nv ZGU+IHNldHRpbmcgdG8gbW92ZSBhbGwgY2hlY2tzdW0gZmlsZXMgdG8gYSBjZW50cmFsIGxv Y2F0aW9uICYjODIxMjsgb3V0c2lkZSBkb2Nyb290ICYjODIxMjsgYW5kIHVzZSB0aGUgc2Ft ZSBkaXJlY3RvcnkgZm9yIGFsbCBkb21haW5zLiBUaGUgPGNvZGU+VW5pcXVlIHByZWZpeDwv Y29kZT4gd2lsbCB0aGVuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbTwvbGk+CgkJPGxpPlRo ZSA8Y29kZT5BZG1pbi1zaWRlIFVSTDwvY29kZT4gbWF5IHdlbGwgYmUgd3Jvbmc6IHlvdSBz aG91bGQgcHJvYmFibHkgY2hhbmdlIHRoaXMgb24gZWFjaCBkb21haW48L2xpPgoJPC9vbD4K Cgk8aDIgaWQ9InNtZF9wcm9naGVscF9iZXR0ZXIiPkhlbHAgbWFrZSB0aGUgcGx1Z2luIGJl dHRlcjwvaDI+CgoJPHA+SWYgc21kX3Byb2dub3N0aWNzIGRvZXMgZGV0ZWN0IHNvbWUgcm9n dWUgZWxlbWVudHMgaW4geW91ciBmaWxlc3lzdGVtLCBwbGVhc2UgY29uc2lkZXIgc2VuZGlu ZyB0aGUgZm9yZW5zaWNzIHRvIHByb2dub3N0aWNzIFthdF0gc3RlZmRhd3NvbiBbZG90XSBj b20gd2l0aCBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHlvdSBwb3NzaWJseSBjYW4uIFlvdSBj YW4gZWl0aGVyIGRvIHRoaXMgYXV0b21hdGljYWxseSBmcm9tIHdpdGhpbiB0aGUgcGx1Z2lu IChzZWUgdGhlIHNldHVwIHBhZ2UsIHRob3VnaCBub3RlIHRoZSBzZW5zaXRpdml0eSBvZiBz b21lIG9mIHRoZSBkYXRhIHNlbnQpIG9yIGNvcHkgYW5kIHBhc3RlIHJlbGV2YW50IGluZm9y bWF0aW9uIGludG8gYW4gZS1tYWlsLiBUaGUgc29ydCBvZiBzdHVmZiB0aGF0IG1pZ2h0IGJl IHVzZWZ1bCBpczo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiAoYW5kL29yIHNlcnZlcikgbG9ncyBmb3IgdGhlIHRpbWUgb2YgdGhlIGF0dGFjazwv bGk+CgkJPGxpPlRoZSBsaW5lcyBvZiB0aGUgZmlsZShzKSB0aGF0IHdlcmUgYWZmZWN0ZWQg KG9yIHRoZSBmaWxlcyBpbiB0aGVpciBlbnRpcmV0eSk8L2xpPgoJCTxsaT5UaGUgY29udGVu dCBvZiBhbnkgYWRkaXRpb25hbCBsaW5lcyBhZGRlZCBvciBhbHRlcmVkIGluIHRoZSBmaWxl czwvbGk+CgkJPGxpPllvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4sIDxzcGFu IGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+LCBNeVNRTCBhbmQgQXBhY2hlIHZlcnNpb25zPC9s aT4KCQk8bGk+WW91ciBob3N0ZXIgY29tcGFueSBuYW1lPC9saT4KCTwvdWw+CgoJPHA+YW5k IHNvIG9uLiBBbnkgYW5kIGFsbCBpbmZvcm1hdGlvbiB3aWxsIGJlIHRyZWF0ZWQgaW4gdGhl IHN0cmljdGVzdCBjb25maWRlbmNlIG9mIGNvdXJzZS4gQW5hbHlzaW5nIHRoaXMgZGF0YSBt YXkgYWxsb3cgbWUgdG8gaW1wcm92ZSB0aGUgcGx1Z2luIGFuZCBwZXJoYXBzIGNsb3NlIGFu eSBzZWN1cml0eSBob2xlcyBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpdHNl bGYsIG9yIGV2ZW4gaGVscCBtYWtlIHRoZSBwbHVnaW4gbW9yZSBwcm8tYWN0aXZlIGJ5IGRl dGVjdGluZyB0aGUgdmFyaW91cyBraW5kcyBvZiBhdHRhY2sgaW4gcHJvZ3Jlc3MgYW5kIG1p bmltaXNpbmcgZGFtYWdlIHRvIHlvdXIgZmlsZSBzeXN0ZW0uIFRoYW5rcyBpbiBhZHZhbmNl IGZvciB5b3UgaGVscC48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+ CgoJPHVsPgoJCTxsaT4xMSBOb3YgMTAgfCAwLjEwIHwgSW5pdGlhbCByZWxlYXNlPC9saT4K CQk8bGk+MTEgTm92IDEwIHwgMC4xMSB8IEFkZGVkIElnbm9yZSBidXR0b248L2xpPgoJCTxs aT4xMiBOb3YgMTAgfCAwLjEyIHwgRml4ZWQgd2hpdGUgc2NyZWVuIG9mIGRlYXRoIG9uIEZp bGVzIDxlbT5TYXZlPC9lbT4gKGJpbmFyeSBmaWxlcyBhcmUgbm93IGxlZnQgdW5wcm9jZXNz ZWQpIDsgaW1wcm92ZWQgcGVyZm9ybWFuY2UgOyBhZGRlZCBmaWxlIHF1YW50aXR5IGNoZWNr PC9saT4KCQk8bGk+MTUgTm92IDEwIHwgMC4xMyB8IEFsYXJtcyBwYW5lbCBub3cgYWx3YXlz IGRpc3BsYXlzIGFsbCBhbGVydHMgYW5kIGRvZXNuJiM4MjE3O3QgaW50ZXJmZXJlIHdpdGgg ZmlsZSBjaGVja2luZyByb3RhdGlvbiA7IGZpeGVkIGluY29ycmVjdCA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPiBpbiBhY2tub3dsZWRnZSBtZXNzYWdlcyAodGhhbmtzIHRoZWJv bWJzaXRlKSB0aG91Z2ggbXVsdGktc2l0ZSBpbnN0YWxsYXRpb25zIG1heSBzdGlsbCBiZSB3 cm9uZyA7IHJlbW92ZWQgZHVtYiBhZG1pbi1zaWRlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8 L3NwYW4+IGluamVjdGlvbiwgYWRkZWQgPGNvZGU+Q2hlY2sgZmlsZXMgYmV0d2VlbjwvY29k ZT4gYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHZlcnNpb24gYWR2aWNlIChh bGwgdGhhbmtzIHJ1dWQpIDsgdHdlYWtlZCBpbmplY3Rpb24gZGV0ZWN0b3IgOyByZWZhY3Rv cmVkIGUtbWFpbCBoZWFkZXIgY29kZTwvbGk+CgkJPGxpPjE2IE5vdiAxMCB8IDAuMTQgfCBB ZGRlZCBmb3JlbnNpYyBvcHRpb25zIGZvciBoZWFkZXIgc3Bvb2ZpbmcvU1FMIGluamVjdGlv bnMgOyBjYW4gbm93IHRocm93IDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiByZXNw b25zZSBjb2RlIG9yIGN1c3RvbSBtZXNzYWdlL2Zvcm0gaW5zdGVhZCBvZiAmIzgyMTY7bmlj ZSB0cnkmIzgyMTc7IDsgd2lsZGNhcmQgYWJpbGl0eSBmb3IgaWdub3JlZCBmaWxlcyA7IGFk ZGVkIHVzZXIgY2hlY2sgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRpciBv cHRpb24gKHRoYW5rcyBtYXZlcmljayk8L2xpPgoJCTxsaT4wOSBEZWMgMTAgfCAwLjE1IHwg SW1wcm92ZWQgd2FybmluZyBkaXNwbGF5IHdoZW4gc2F2aW5nIHByZWZlcmVuY2VzICh0aGFu a3MgbWFuaXF1aSkgOyBza2lwcGVkIGNvbW1lbnQgcHJldmlldyBzdGVwIGZvciBzcWwgaW5q ZWN0aW9ucyA7IGZpeGVkIHZlcnNpb24gbnVtYmVyIGluIGZyb2dub3N0aWNzIDsgZml4ZWQg ZGlzcGxheSBlcnJvciBvbiBBZHZpY2UgcGFuZWwgOyBhZGRlZCA8Y29kZT5zcWxfaW5qZWN0 aW9uPC9jb2RlPiBjYWxsYmFjayA7IGFkZGVkIHJwYyBhZHZpY2UgY2hlY2s8L2xpPgoJCTxs aT4wOSBEZWMgMTAgfCAwLjE2IHwgTmV2ZXIgYXNzdW1lIEVuZ2xpc2ggYnV0dG9uIG5hbWVz ICh0aGFua3Mgcm9lbG9mKTwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBM VUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBs aW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBm b250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNr Z3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBjb2RlLmJs b2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBkaXNw bGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21k X2hlbHAgaDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsg dGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9yZ2lhLCBz YW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fu cy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0LXRy YW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3NtZF9o ZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3Bh Y2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNl OyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9oZWxwIC5t YW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9CiNzbWRf aGVscCB0YWJsZSB7IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90 dG9tOjFlbTsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9CiNzbWRfaGVscCB0ZCwgI3Nt ZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW07IH0KI3Nt ZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLmltcG9y dGFudCB7IGNvbG9yOnJlZDsgfQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4 IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+ CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiMTNj MmIyODljMDFkMDNjYWE4NzYyZmQyZjk1MGZhNDgiO30=