You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1 lines
280 KiB

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ICA7OwogICAgICAgIC0taG9zdCkKICAgICAgICAgICAgc2hpZnQgICAgICAgICAgICAKICAgICAgICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ob3N0IOWQjuW/hemhu+aMh+WumuS4u+acuuWIl+ihqO+8iOWmgiAtLWhvc3QgMTAyLDEwM++8iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBJRlM9JywnIHJlYWQgLXJhIGhvc3RfbnVtYmVycyA8PDwgIiQxIgogICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoKGk9MDsgaTwkeyNob3N0X251bWJlcnNbQF19OyBpKyspKTsgZG8KICAgICAgICAgICAgICAgIGNhc2UgJGkgaW4KICAgICAgICAgICAgICAgICAgICAwKQogICAgICAgICAgICAgICAgICAgICAgICBob3N0MT0iJHtob3N0X251bWJlcnNbMF19IgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QyPSIke2hvc3RfbnVtYmVyc1sxXX0iCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwoJCSAgLS1wb3J0KQogICAgICAgICAgICBzaGlmdCAgICAgICAgICAgIAogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLXBvcnQg5ZCO5b+F6aG75oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tcG9ydCA077yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRlc3RfcG9ydD0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CgkJICAtLXRvcG8pCiAgICAgICAgICAgIHNoaWZ0ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tcG9ydCDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS10b3BvIG9ub2Mvb25ldO+8iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICB0ZXN0X3RvcG89IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogIAkJCiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICQxIgogICAgICAgICAgICBlY2hvICLnlKjms5U6ICQwIFstLW5vZGUgTk9ERV9JRF0gWy0taG9zdCBIT1NUMSxIT1NUMl0gWy0tcG9ydCA0XSBbLS10b3BvIG9ub2Mvb25ldF0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKZmlyc3Rfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCnNlY29uZF9ub2RlPSIkKCh0YXJnZXRfc3Rhcl9ub2RlICsgNCkpIgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlN19ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZThfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmV4cG9ydCBTTk9ERTE9IiRub2RlMV9ibWMsJG5vZGUyX2JtYywkbm9kZTNfYm1jLCRub2RlNF9ibWMiCmV4cG9ydCBTTk9ERTI9IiRub2RlNV9ibWMsJG5vZGU2X2JtYywkbm9kZTdfYm1jLCRub2RlOF9ibWMiCgoKYm1jX2hvc3QxPSQoZWNobyAiJG5vZGUxX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mj0kKGVjaG8gIiRub2RlMl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDM9JChlY2hvICIkbm9kZTNfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q0PSQoZWNobyAiJG5vZGU0X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0NT0kKGVjaG8gIiRub2RlNV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDY9JChlY2hvICIkbm9kZTZfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q3PSQoZWNobyAiJG5vZGU3X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0OD0kKGVjaG8gIiRub2RlOF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCiMg5qCh6aqM6YWN572u5a6M5pW05oCnCmlmIFtbICIkbm9kZTFfaXAiID09ICJudWxsIiB8fCAteiAiJG5vZGUxX2lwIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu25Lit5pyq5om+5YiwIHN0YXJfbm9kZT0kdGFyZ2V0X3N0YXJfbm9kZSDnmoTmnInmlYjphY3nva4iCiAgICBleGl0IDEKZmkKCmNvbnZlcnRfbm9kZSgpIHsKICAgIGxvY2FsIGlucHV0X25vZGU9IiQxIgogICAgbG9jYWwgc3RhcnRfbm9kZT0iJDIiCiAgICBsb2NhbCBub2RlX3N1ZmZpeAogICAgbG9jYWwgdGFyZ2V0X25vZGVfbnVtCiAgICBsb2NhbCB0YXJnZXRfbm9kZSAgICAKICAgIG5vZGVfc3VmZml4PSQoZWNobyAiJGlucHV0X25vZGUiIHwgc2VkIC1uRSAncy9ebm9kZShbMC05XSspJC9cMS9wJykKCiAgICBpZiBbWyAteiAiJG5vZGVfc3VmZml4IiBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui+k+WFpSBub2RlIOagvOW8j+aXoOaViO+8jOmcgOS4uiAnbm9kZSvmlbDlrZcn77yI5aaCIG5vZGUx44CBbm9kZTLvvIkiID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgaWYgISBbWyAiJHN0YXJ0X25vZGUiID1+IF5bMC05XSskIF1dOyB0aGVuCiAgICAgICAgZWNobyAi6ZSZ6K+v77ya6LW35aeL5YGP56e76YeP6ZyA5Li65q2j5pW05pWwIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIAogICAgdGFyZ2V0X25vZGVfbnVtPSQoKG5vZGVfc3VmZml4ICsgc3RhcnRfbm9kZSAtIDEpKQogICAgdGFyZ2V0X25vZGU9Im5vZGUkdGFyZ2V0X25vZGVfbnVtIgogICAgZWNobyAiJHRhcmdldF9ub2RlIgogICAgcmV0dXJuIDAKfQoKY29sbGVjdF9vbmV0X2Nyb3NzKCkgewogICAgbG9jYWwgYWN0aXZlX2JtYz0kMQoJbG9jYWwgY3Jvc3NfYm1jPSQyCiAgICBsb2NhbCBhY3RpdmVfcG9ydD0kMwoJbG9jYWwgb2NzX3RvcG89JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jIgogICAgbG9jYWwgY3Jvc3NfaG9zdD0iaHR0cHM6Ly8kY3Jvc3NfYm1jIgogICAgbG9jYWwgYWN0aXZlX25vZGU9JChlY2hvICIkYWN0aXZlX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoZWNobyAiJGNyb3NzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBkaXNfdHhfbGlzdD0oIiRjcm9zc19ibWMiKQogICAgSUZTPScsJyByZWFkIC1yYSBzbm9kZTEgPDw8ICRTTk9ERTEKICAgIElGUz0nLCcgcmVhZCAtcmEgc25vZGUyIDw8PCAkU05PREUyCiAgICAKICAgICNkaXNhYmxlIGNyb3NzIG9jcyBhbmQgb3RoZXIgc25vZGUgb2NzICAgIAogICAgZm9yIGluZGV4IGluICIkeyFzbm9kZTFbQF19IjsgZG8gICAgICAgICAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTFbJGluZGV4XX0iID0gIiRhY3RpdmVfYm1jIiBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgbG9jYWwgZGlzX3R4X2xpc3QrPSgke3Nub2RlMlskaW5kZXhdfSkgCiAgICAgICAgZmkgCiAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTFbJGluZGV4XX0iID0gIiRjcm9zc19ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUyWyRpbmRleF19KSAKICAgICAgICBmaSAKICAgICAgICAKICAgIGRvbmUKICAgIAogICAgZm9yIGluZGV4IGluICIkeyFzbm9kZTJbQF19IjsgZG8gCiAgICAgICAgaWYgWyAiJHtzbm9kZTJbJGluZGV4XX0iID0gIiRhY3RpdmVfYm1jIiBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUxWyRpbmRleF19KSAKICAgICAgICAgICAgCiAgICAgICAgZmkgCiAgICAgICAgCiAgICAgICAgaWYgWyAiJHtzbm9kZTJbJGluZGV4XX0iID0gIiRjcm9zc19ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUxWyRpbmRleF19KSAKICAgICAgICBmaSAKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgoKICAgICNhY3RpdmF0ZV9vY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgoJCQllY2hvICRjbWQKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAmCiAgICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBkaXNhYmxlIGNyb3NzX3BvcnQ6ICRhY3RpdmVfcG9ydCA9PT09PT09PT09PT09PT0iCiAgICBmb3IgdHhfYm1jIGluICIke2Rpc190eF9saXN0W0BdfSI7IGRvICAgICAgCiAgICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgICAgZm9yICgobT0xOyBtPD02OyBtKyspKTsgZG8KICAgICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgaHR0cHM6Ly8kdHhfYm1jIC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHhmZiAtLW9jcyAkb2NzIgogICAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICBmaSAKICAgICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgICBkb25lCiAgICAgIGRvbmUgJiAgICAgIAogICAgZG9uZQogICAgd2FpdAogICAgCiAgICAKICAgIGVjaG8gLWUgIlxuc2xlZXAgMTBzLCB3YWl0aW5nIG9jcyBzdGFibGUuLi4iCiAgICBzbGVlcCAxMAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgJGFjdGl2ZV9ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaj0xOyBqPD02OyBqKyspKTsgZG8KICAgICAgbG9jYWwgYWN0aXZlX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGFjdGl2ZV9ibWMgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKSAgICAKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgICAgCiAgICAgIGlmICEgZWNobyAiJGFjdGl2ZV9wb3J0X2NtaXMiIHwgZ3JlcCAtcSAiQXN5bmNQb2xsIGZhaWxlZHxsb2NrOiBGYWlsZWQiOyB0aGVuCiAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgYnJlYWsKICAgICAgZmkgCiAgICAgIHNsZWVwIDMKICAgIGRvbmUgCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCAkY3Jvc3NfYm1jOiBwJGFjdGl2ZV9wb3J0IGNtaXMgZGF0YSAtLS0tLSIKICAgIGZvciAoKGs9MTsgazw9NjsgaysrKSk7IGRvCiAgICAgIGxvY2FsIGNyb3NzX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGNyb3NzX2JtYyAtZSAkYWN0aXZlX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X2NtaXMgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X2NtaXMiCiAgICAgIGlmICEgZWNobyAiJGNyb3NzX3BvcnRfY21pcyIgfCBncmVwIC1xRSAiQXN5bmNQb2xsIGZhaWxlZHxsb2NrOiBGYWlsZWQiOyB0aGVuICAgICAgCiAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgYnJlYWsKICAgICAgZmkgCiAgICAgIHNsZWVwIDMKICAgIGRvbmUgCiAgICAgIAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgcCRhY3RpdmVfcG9ydCBSU1NJIGRhdGEgLS0tLS0iCiAgICBzbGVlcCAyCiAgICBsb2NhbCBjcm9zc19wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgMj4mMSkgCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKSAKCiAgICAKICAgICAgICAgICAgCiAgICAjIOiwg+ivlei+k+WHuu+8iOaMiemcgOW8gOWQr++8iQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfcnNzaSAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfcnNzaSIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9yc3NpICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X3Jzc2kiCiAgICAgICAgCiAgICBlY2hvIC1lICJcbi0tLS0g6LCD55SoIFB5dGhvbiDliIbmnpAgJGFjdGl2ZV9wb3J0IOaVsOaNriAtLS0tIgogICAgZXhwb3J0IExPT1A9IiRvY3NfdG9wbyIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVD0iJGFjdGl2ZV9ub2RlLVAkYWN0aXZlX3BvcnQiIAogICAgZXhwb3J0IENST1NTX1BPUlQ9IiRjcm9zc19ub2RlLVAkYWN0aXZlX3BvcnQiCiAgICBleHBvcnQgQUNUSVZFX1BPUlRfUlNTST0iJGFjdGl2ZV9wb3J0X3Jzc2kiIEFDVElWRV9QT1JUX0NNSVM9IiRhY3RpdmVfcG9ydF9jbWlzIiAKICAgIGV4cG9ydCBDUk9TU19QT1JUX1JTU0k9IiRjcm9zc19wb3J0X3Jzc2kiIENST1NTX1BPUlRfQ01JUz0iJGNyb3NzX3BvcnRfY21pcyIKCiAgICBweXRob24zIGNvbGxlY3RfdGVzdF9kYXRhX29ub2NfcnNzaS5weSAKICAgIAogICAgdW5zZXQgTE9PUCBBQ1RJVkVfQk1DIEFDVElWRV9QT1JUIENST1NTX0JNQyBDUk9TU19QT1JUCiAgICB1bnNldCBBQ1RJVkVfUE9SVF9SU1NJIEFDVElWRV9QT1JUX0NNSVMgQ1JPU1NfUE9SVF9SU1NJIENST1NTX1BPUlRfQ01JUyAgICAKCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0kYWN0aXZlX2JtYyBhbmQgJGNyb3NzX2JtYzogcCRhY3RpdmVfcG9ydCDmlbDmja7lpITnkIblrozmiJAgPT09PT09PT09PT09PT09XG4iCiAgICBzbGVlcCA2CiAgICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBlbmFibGUgYWN0aXZlIHBvcnQ6ICRhY3RpdmVfcG9ydCA9PT09PT09PT09PT09PT0iCiAgICAjYWN0aXZhdGVfb2NzIAogICAgZm9yIHR4X2JtYyBpbiAiJHtkaXNfdHhfbGlzdFtAXX0iOyBkbyAgICAgIAogICAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0IGh0dHBzOi8vJHR4X2JtYyAtLXBvcnQgJGFjdGl2ZV9wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDAgLS1vY3MgJG9jcyIKICAgICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgZmkgCiAgICAgICAgICAgICAgc2xlZXAgMwogICAgICAgICAgZG9uZQogICAgICBkb25lICYgICAgICAKICAgIGRvbmUKICAgIHdhaXQKfQoKZXhwb3J0IC1mIGNvbGxlY3Rfb25ldF9jcm9zcwoKbGlua19jcm9zc3RhbGsgKCkgewogICAgbG9jYWwgYWN0aXZlX2JtYz0kMQogICAgbG9jYWwgY3Jvc3NfYm1jPSQyCQogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDMKICAgIGxvY2FsIGFjdGl2ZV9ub2RlPSQoZWNobyAiJGFjdGl2ZV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQogICAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGVjaG8gIiRjcm9zc19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKICAgICMjIyMjIyMjIyMjb25vYyBjcm9zcyB0YWxrIyMjIyMjIyMjIyMjIwogICAgZWNobyAiPT09PT09PT09PT09PT10ZXN0IG5vZGU6JGFjdGl2ZV9ub2RlLCRjcm9zc19ub2RlIHBvcnQ6JGFjdGl2ZV9wb3J0IG9ub2MgY3Jvc3MgdGFsaz09PT09PT09PT09IgogICAgaWYgWyAiJGFjdGl2ZV9wb3J0IiAtZXEgNCBdOyB0aGVuCiAgICAgICAgbG9jYWwgb2NzX3RvcG89Im9ub2M2IgogICAgZWxpZiBbICIkYWN0aXZlX3BvcnQiIC1lcSA2IF07IHRoZW4KICAgICAgICBsb2NhbCBvY3NfdG9wbz0ib25vYzciCiAgICBlbGlmIFsgIiRhY3RpdmVfcG9ydCIgLWVxIDggXTsgdGhlbgogICAgICAgIGxvY2FsIG9jc190b3BvPSJvbm9jNiIKICAgIGZpCgogICAgaWYgWyAiJHRlc3RfdG9wbyIgPT0gIm9ub2MiIC1vICIkdGVzdF90b3BvIiA9PSAiIiBdOyB0aGVuCiAgICAJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgIAl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGNyb3NzX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCiAgICAJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRhY3RpdmVfYm1jICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICAgCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkY3Jvc3NfYm1jICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgZmkKCgkKCSMjIyMjIyMjIyMjb25ldCBjcm9zcyB0YWxrIyMjIyMjIyMjIyMjIwoJZWNobyAidGVzdCBub2RlOiRhY3RpdmVfbm9kZSwkY3Jvc3Nfbm9kZSBwb3J0OiRhY3RpdmVfcG9ydCBvbmV0IGNyb3NzIHRhbGsiCQoJbG9jYWwgc25vZGVfYT0kKCgoYWN0aXZlX25vZGUgLSBibWNfaG9zdDEpIC8gNCkpCiAgICBsb2NhbCBzbm9kZV9jPSQoKChjcm9zc19ub2RlIC0gYm1jX2hvc3QxKSAvIDQpKSAKCiAgICBpZiBbICRzbm9kZV9hIC1lcSAkc25vZGVfYyBdOyB0aGVuCgkJZWNobyAidGhlIHNhbWUgc25vZGUgc2V0IHRvcG8tb25ldGIiCgkJbG9jYWwgb2NzX3RvcG89Im9uZXRiIgkKCWVsc2UKCQllY2hvICJub3QgdGhlIHNhbWUgc25vZGUgc2V0IHRvcG8tb25ldGEiCgkJbG9jYWwgb2NzX3RvcG89Im9uZXRhIgkJCglmaQoKCWlmIFsgIiR0ZXN0X3RvcG8iID09ICJvbmV0IiAtbyAiJHRlc3RfdG9wbyIgPT0gIiIgXTsgdGhlbgogICAgCWlmIFsgIiRhY3RpdmVfcG9ydCIgLW5lIDggXTsgdGhlbgogICAgCQl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICAgCQl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGNyb3NzX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCiAgICAJCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkYWN0aXZlX2JtYyAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgIAkJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRjcm9zc19ibWMgJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICAgCWZpCiAgIGZpCQp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82NF94ei1jcm9zc3RhbGtfb2NzX3Jzc2lfJGJtY19ob3N0MV8kYm1jX2hvc3QxLSRibWNfaG9zdDhfJChkYXRlICslWSVtJWRfJUglTSVTKS5sb2ciCmNzdl9maWxlPSJjc3ZfZGF0YS82NF94ei1jcm9zc3RhbGtfb2NzX3Jzc2lfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgpleHBvcnQgQ1NWX0ZJTEU9IiRjc3ZfZmlsZSIKCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmV4cG9ydCBkZWJ1Z19tb2RlPTEKCgppZiBbIC1uICIkaG9zdDEiIF0gJiYgWyAtbiAiJGhvc3QyIiBdOyB0aGVuCglpZiBbWyAiJGhvc3QxIiA9PSAqLiogXV07IHRoZW4KICAgIG5vZGUxX2JtY2lwPSIkaG9zdDEiCiAgICAKICAgIG5vZGUyX2JtY2lwPSIkaG9zdDIiCiAgZWxzZQogICAgbm9kZTFfYm1jaXA9IiR7bm9kZTFfYm1jJS4qfS4kaG9zdDEiCiAgICBub2RlMl9ibWNpcD0iJHtub2RlMV9ibWMlLip9LiRob3N0MiIKICBmaQogICAgCglsaW5rX2Nyb3NzdGFsayAkbm9kZTFfYm1jaXAgJG5vZGUyX2JtY2lwICR0ZXN0X3BvcnQgICAgCmVsc2UKICAgIGlmIFsgIiR0ZXN0X3BvcnQiID09ICI0IiAtbyAiJHRlc3RfcG9ydCIgPT0gIiIgXTsgdGhlbgogICAgICAgIGVjaG8gIi0tLS0tLSBjb2xsZWN0IHBvcnQgNCBjcm9zcyB0YWxrIGRhdGEgLS0tLS0tIgogICAgICAgIGxpbmtfY3Jvc3N0YWxrICRub2RlOF9ibWMgJG5vZGU2X2JtYyA0CiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGU3X2JtYyAkbm9kZTVfYm1jIDQKICAgICAgICBsaW5rX2Nyb3NzdGFsayAkbm9kZTZfYm1jICRub2RlNF9ibWMgNAogICAgICAgIGxpbmtfY3Jvc3N0YWxrICRub2RlNV9ibWMgJG5vZGUzX2JtYyA0CiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGU0X2JtYyAkbm9kZTJfYm1jIDQKICAgICAgICBsaW5rX2Nyb3NzdGFsayAkbm9kZTNfYm1jICRub2RlMV9ibWMgNAogICAgICAgIGxpbmtfY3Jvc3N0YWxrICRub2RlMl9ibWMgJG5vZGU4X2JtYyA0CiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGUxX2JtYyAkbm9kZTdfYm1jIDQKICAgIGZpCgogICAgaWYgWyAiJHRlc3RfcG9ydCIgPT0gIjYiIC1vICIkdGVzdF9wb3J0IiA9PSAiIiBdOyB0aGVuCiAgICAgICAgZWNobyAiLS0tLS0tIGNvbGxlY3QgcG9ydCA2IGNyb3NzIHRhbGsgZGF0YSAtLS0tLS0tIgogICAgICAgIGxpbmtfY3Jvc3N0YWxrICRub2RlOF9ibWMgJG5vZGU1X2JtYyA2CiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGU3X2JtYyAkbm9kZTZfYm1jIDYKICAgICAgICBsaW5rX2Nyb3NzdGFsayAkbm9kZTZfYm1jICRub2RlM19ibWMgNgogICAgICAgIGxpbmtfY3Jvc3N0YWxrICRub2RlNV9ibWMgJG5vZGU0X2JtYyA2CiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGU0X2JtYyAkbm9kZTFfYm1jIDYJCiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGUzX2JtYyAkbm9kZTJfYm1jIDYJCiAgICAgICAgbGlua19jcm9zc3RhbGsgJG5vZGUyX2JtYyAkbm9kZTdfYm1jIDYKICAgICAgICBsaW5rX2Nyb3NzdGFsayAkbm9kZTFfYm1jICRub2RlOF9ibWMgNgogICAgZmkKICAgIGlmIFsgIiR0ZXN0X3BvcnQi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ZWFyY2gocicoXGQrKS1QKFxkKyknLCBhY3RpdmVfcG9ydF9zdHIpCiAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgcHJpbnQoZiLml6Dms5Xop6PmnpAgQUNUSVZFX1BPUlQg5qC85byP77yae2FjdGl2ZV9wb3J0X3N0cn0iKQogICAgICAgIHJldHVybiBOb25lLCBOb25lCiAgICBpcF9zdWZmaXggPSBtYXRjaC5ncm91cCgxKQogICAgZXhwID0gaW50KG1hdGNoLmdyb3VwKDIpKQogICAgcmV0dXJuIGlwX3N1ZmZpeCwgZXhwCgpkZWYgcnVuX29jc2RpYWcoaXBfc3VmZml4LCBleHApOgogICAgIiIi5omn6KGMIG9jc2RpYWcg5ZG95Luk77yI5YW85a65IHNoZWxsIOeOr+Wig++8ieW5tui/lOWbnuWujOaVtOi+k+WHuiIiIgogICAgY21kX3N0ciA9IGYib2NzZGlhZyAtaSB7aXBfc3VmZml4fSAtZSB7ZXhwfSAtcyBhbGwgLWMgcmVnLXJkIC1wIHN3Yl9vbmV0Yl9oLHN3Yl9vbmV0YV9oLHN3YV9vbm9jX2gsc3dhX29uZXRfaCIKICAgIHByaW50KGYi5omn6KGM5ZG95Luk77yae2NtZF9zdHJ9IikKICAgIAogICAgdHJ5OgogICAgICAgICMg5YWz6ZSu77ya5L2/55SoIHNoZWxsPVRydWXvvIzlhbzlrrnpnIDopoEgc2hlbGwg546v5aKD55qE5ZG95LukCiAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5Qb3BlbigKICAgICAgICAgICAgY21kX3N0ciwKICAgICAgICAgICAgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCAgIyDlkIjlubYgc3RkZXJyIOWIsCBzdGRvdXQKICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCiAgICAgICAgICAgIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgIGJ1ZnNpemU9MSwKICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUKICAgICAgICApCiAgICAgICAgCiAgICAgICAgIyDlrp7ml7bor7vlj5bovpPlh7rvvIjpgb/lhY3nvJPlhrLljLrpl67popjvvIkKICAgICAgICBzdGRvdXQgPSAiIgogICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgIHRpbWVvdXQgPSAzMCAgIyDotoXml7YzMOenkgogICAgICAgIAogICAgICAgIHdoaWxlIHJlc3VsdC5wb2xsKCkgaXMgTm9uZToKICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgLSBzdGFydF90aW1lID4gdGltZW91dDoKICAgICAgICAgICAgICAgIHJlc3VsdC5raWxsKCkKICAgICAgICAgICAgICAgIHByaW50KCLlkb3ku6TmiafooYzotoXml7bvvIEiKQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgbGluZSA9IHJlc3VsdC5zdGRvdXQucmVhZGxpbmUoKQogICAgICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgICAgc3Rkb3V0ICs9IGxpbmUKICAgICAgICAgICAgICAgICMg5omT5Y2w5a6e5pe26L6T5Ye677yI5L6/5LqO6LCD6K+V77yJCiAgICAgICAgICAgICAgICBwcmludChmIuWunuaXtui+k+WHuu+8mntsaW5lLnN0cmlwKCl9IikKICAgICAgICAKICAgICAgICAjIOivu+WPluWJqeS9mei+k+WHugogICAgICAgIHN0ZG91dCArPSByZXN1bHQuc3Rkb3V0LnJlYWQoKQogICAgICAgIHJldHVybmNvZGUgPSByZXN1bHQucmV0dXJuY29kZQogICAgICAgIAogICAgICAgIGlmIHJldHVybmNvZGUgIT0gMDoKICAgICAgICAgICAgcHJpbnQoZiLorablkYrvvJrlkb3ku6Tov5Tlm57pnZ4w54q25oCB56CBIHtyZXR1cm5jb2RlfSIpCiAgICAgICAgcmV0dXJuIHN0ZG91dAogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KGYi5omn6KGM5ZG95Luk5pe25Y+R55Sf5byC5bi477yae3R5cGUoZSkuX19uYW1lX199IC0ge2V9IikKICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCiAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAgcmV0dXJuICIiCgpkZWYgcGFyc2Vfc3dhYl9kYXRhKHN3YWJfc3RyKToKICAgICIiIuWinuW8uueJiOino+aekO+8mui3s+i/h+eJiOacrOWPt++8jOWFvOWuueS7u+aEj+agvOW8jyIiIgogICAgc3dhYl9kaWN0ID0ge30KICAgICMg5Yid5aeL5YyW5omA5pyJIGNtaXMoMS04KSDlkowgY2goMS04KQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIGZvciBjaF9udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgICAgIHN3YWJfZGljdFsoY21pc19udW0sIGNoX251bSldID0gewogICAgICAgICAgICAgICAgJ3N3Yl9vbmV0Yl9oJzogTm9uZSwKICAgICAgICAgICAgICAgICdzd2Jfb25ldGFfaCc6IE5vbmUsCiAgICAgICAgICAgICAgICAnc3dhX29ub2NfaCc6IE5vbmUsCiAgICAgICAgICAgICAgICAnc3dhX29uZXRfaCc6IE5vbmUKICAgICAgICAgICAgfQogICAgCiAgICBpZiBub3Qgc3dhYl9zdHI6CiAgICAgICAgcmV0dXJuIHN3YWJfZGljdAogICAgCiAgICAjIOi3s+i/h+eJiOacrOWPt+ihjO+8iOWmgiAxLjIuMTHvvInvvIzlj6rlpITnkIbmnInmlYjmlbDmja4KICAgIHN3YWJfbGluZXMgPSBbXQogICAgZm9yIGxpbmUgaW4gc3dhYl9zdHIuc3BsaXQoIlxuIik6CiAgICAgICAgbGluZV9zdHJpcCA9IGxpbmUuc3RyaXAoKQogICAgICAgICMg6Lez6L+H56m66KGM44CB54mI5pys5Y+36KGM44CB57qv5pWw5a2X6KGMCiAgICAgICAgaWYgbm90IGxpbmVfc3RyaXAgb3IgcmUubWF0Y2gocideXGQrXC5cZCtcLlxkKyQnLCBsaW5lX3N0cmlwKToKICAgICAgICAgICAgY29udGludWUKICAgICAgICBzd2FiX2xpbmVzLmFwcGVuZChsaW5lX3N0cmlwKQogICAgCiAgICBpZiBub3Qgc3dhYl9saW5lczoKICAgICAgICBwcmludCgi5peg5pyJ5pWI5pWw5o2u6KGM77yI5bey6Lez6L+H54mI5pys5Y+3L+epuuihjO+8iSIpCiAgICAgICAgcmV0dXJuIHN3YWJfZGljdAogICAgCiAgICBtYXRjaGVkX2NvdW50ID0gMAogICAgIyDnu4jmnoHmraPliJnvvJrljLnphY3ku7vmhI/kvY3nva7nmoQgc2xvdC9sYW5lL3JlZy92YWx1ZQogICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoCiAgICAgICAgcicoPzpzbG90fFNMT1QpXEQqKFxkKykuKj8oPzpsYW5lfExBTkUpXEQqKFxkKykuKj8oPzpyZWd8UkVHKVxEKihzd2Jfb25ldGJfaHxzd2Jfb25ldGFfaHxzd2Ffb25vY19ofHN3YV9vbmV0X2gpLio/KD86dmFsdWV8VkFMVUUpXEQqKFxkKyknLAogICAgICAgIHJlLkkgfCByZS5TCiAgICApCiAgICAKICAgIGZvciBsaW5lIGluIHN3YWJfbGluZXM6CiAgICAgICAgbWF0Y2ggPSBwYXR0ZXJuLnNlYXJjaChsaW5lKQogICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzbG90ID0gaW50KG1hdGNoLmdyb3VwKDEpKQogICAgICAgICAgICAgICAgbGFuZSA9IGludChtYXRjaC5ncm91cCgyKSkKICAgICAgICAgICAgICAgIHJlZ19uYW1lID0gbWF0Y2guZ3JvdXAoMykubG93ZXIoKQogICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC5ncm91cCg0KQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjbWlzX251bSA9IHNsb3QgKyAxCiAgICAgICAgICAgICAgICBjaF9udW0gPSBsYW5lICsgMQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAxIDw9IGNtaXNfbnVtIDw9IDggYW5kIDEgPD0gY2hfbnVtIDw9IDg6CiAgICAgICAgICAgICAgICAgICAgc3dhYl9kaWN0WyhjbWlzX251bSwgY2hfbnVtKV1bcmVnX25hbWVdID0gdmFsdWUKICAgICAgICAgICAgICAgICAgICBtYXRjaGVkX2NvdW50ICs9IDEKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgcHJpbnQoZiLop6PmnpDooYzlpLHotKXvvJp7bGluZX0g4oaSIHtlfSIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyDmiZPljbDmiYDmnInpnZ7nqbrooYzvvIjkvr/kuo7osIPor5XvvIkKICAgICAgICAgICAgcHJpbnQoZiLmnKrljLnphY3ooYzvvJp7bGluZX0iKQogICAgCiAgICBwcmludChmIuino+aekOWIsCB7bWF0Y2hlZF9jb3VudH0g6KGM5pyJ5pWIIHN3YWIg5pWw5o2uIikKICAgIHJldHVybiBzd2FiX2RpY3QKCmRlZiBpbXBvcnRfc3dhYl9mcm9tX2ZpbGUoZmlsZV9wYXRoKToKICAgICIiIuS7juaWh+S7tuWvvOWFpSBzd2FiIOaVsOaNru+8iOWkh+eUqOaWueahiO+8iSIiIgogICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6CiAgICAgICAgcHJpbnQoZiLmlofku7bkuI3lrZjlnKjvvJp7ZmlsZV9wYXRofSIpCiAgICAgICAgcmV0dXJuIHt9CiAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGY6CiAgICAgICAgcmV0dXJuIHBhcnNlX3N3YWJfZGF0YShmLnJlYWQoKSkKCmRlZiBtYWluKCk6CiAgICAjIOiOt+WPliBDU1Yg5paH5Lu26Lev5b6ECiAgICBjc3ZfZmlsZSA9IHN5cy5hcmd2WzFdIGlmIGxlbihzeXMuYXJndikgPiAxIGVsc2Ugb3MuZ2V0ZW52KCJDU1ZfRklMRSIsICIiKQogICAgaWYgbm90IGNzdl9maWxlIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhjc3ZfZmlsZSk6CiAgICAgICAgcHJpbnQoZiLplJnor6/vvJpDU1Yg5paH5Lu25LiN5a2Y5ZyoIOKGkiB7Y3N2X2ZpbGV9IikKICAgICAgICByZXR1cm4KICAgIAogICAgIyDor7vlj5YgQ1NWCiAgICB0cnk6CiAgICAgICAgZGYgPSBwZC5yZWFkX2Nzdihjc3ZfZmlsZSwgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICBwcmludChmIuaIkOWKn+ivu+WPliBDU1Yg5paH5Lu277yae2Nzdl9maWxlfe+8iOWFsSB7bGVuKGRmKX0g6KGM77yJIikKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBwcmludChmIuivu+WPliBDU1Yg5aSx6LSl77yae2V9IikKICAgICAgICByZXR1cm4KICAgIAogICAgIyDmoKHpqozlv4XopoHliJcKICAgIHJlcXVpcmVkX2NvbHMgPSBbIkFDVElWRV9QT1JUIiwgIk9DUyIsICJsYW5lIl0KICAgIG1pc3NpbmdfY29scyA9IFtjb2wgZm9yIGNvbCBpbiByZXF1aXJlZF9jb2xzIGlmIGNvbCBub3QgaW4gZGYuY29sdW1uc10KICAgIGlmIG1pc3NpbmdfY29sczoKICAgICAgICBwcmludChmIumUmeivr++8mkNTViDnvLrlsJHlv4XopoHliJcg4oaSIHttaXNzaW5nX2NvbHN9IikKICAgICAgICByZXR1cm4KICAgIAogICAgIyDliJ3lp4vljJbmlrDlop7liJcKICAgIHN3YWJfY29scyA9IFsic3diX29uZXRiX2giLCAic3diX29uZXRhX2giLCAic3dhX29ub2NfaCIsICJzd2Ffb25ldF9oIl0KICAgIGZvciBjb2wgaW4gc3dhYl9jb2xzOgogICAgICAgIGlmIGNvbCBub3QgaW4gZGYuY29sdW1uczoKICAgICAgICAgICAgZGZbY29sXSA9IE5vbmUKICAgIAogICAgIyDmiYvliqjlr7zlhaXmlbDmja7nmoTlvIDlhbPvvIjlpoLmnpzlkb3ku6TmiafooYzlpLHotKXvvIzkvb/nlKjmraTmlrnmoYjvvIkKICAgIFVTRV9GSUxFX0lNUE9SVCA9IEZhbHNlCiAgICBTV0FCX0ZJTEUgPSAib2NzZGlhZ19vdXRwdXQudHh0IiAgIyDmiYvliqjkv53lrZjnmoQgb2NzZGlhZyDovpPlh7rmlofku7YKICAgIAogICAgIyDmjIkgQUNUSVZFX1BPUlQg5YiG57uE5aSE55CGCiAgICBhY3RpdmVfcG9ydF9ncm91cHMgPSBkZi5ncm91cGJ5KCJBQ1RJVkVfUE9SVCIpCiAgICBwcm9jZXNzZWRfcG9ydHMgPSBzZXQoKQogICAgCiAgICBmb3IgYWN0aXZlX3BvcnQsIGdyb3VwX2RmIGluIGFjdGl2ZV9wb3J0X2dyb3VwczoKICAgICAgICBpZiBwZC5pc25hKGFjdGl2ZV9wb3J0KSBvciBhY3RpdmVfcG9ydCBpbiBwcm9jZXNzZWRfcG9ydHM6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgcHJpbnQoZiJcbj09PT09IOWkhOeQhuerr+WPo++8mnthY3RpdmVfcG9ydH0gPT09PT0iKQogICAgICAgIHByb2Nlc3NlZF9wb3J0cy5hZGQoYWN0aXZlX3BvcnQpCiAgICAgICAgCiAgICAgICAgIyDop6PmnpAgSVAg5ZKMIGV4cAogICAgICAgIGlwX3N1ZmZpeCwgZXhwID0gcGFyc2VfYWN0aXZlX3BvcnQoYWN0aXZlX3BvcnQpCiAgICAgICAgaWYgbm90IGlwX3N1ZmZpeCBvciBub3QgZXhwOgogICAgICAgICAgICBwcmludChmIui3s+i/h++8muaXoOazleino+aekCBBQ1RJVkVfUE9SVCDihpIge2FjdGl2ZV9wb3J0fSIpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgIyDmlrnmoYgx77ya5omn6KGM5ZG95Luk6I635Y+W5pWw5o2uCiAgICAgICAgaWYgbm90IFVTRV9GSUxFX0lNUE9SVDoKICAgICAgICAgICAgc3dhYl9vdXRwdXQgPSBydW5fb2NzZGlhZyhpcF9zdWZmaXgsIGV4cCkKICAgICAgICAgICAgc3dhYl9kaWN0ID0gcGFyc2Vfc3dhYl9kYXRhKHN3YWJfb3V0cHV0KQogICAgICAgICMg5pa55qGIMu+8muS7juaWh+S7tuWvvOWFpeaVsOaNru+8iOWkh+eUqO+8iQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KGYi5LuO5paH5Lu25a+85YWl5pWw5o2u77yae1NXQUJfRklMRX0iKQogICAgICAgICAgICBzd2FiX2RpY3QgPSBpbXBvcnRfc3dhYl9mcm9tX2ZpbGUoU1dBQl9GSUxFKQogICAgICAgIAogICAgICAgICMg5aGr5YWF5pWw5o2uCiAgICAgICAgZmlsbGVkX2NvdW50ID0gMAogICAgICAgIGZvciBpZHggaW4gZ3JvdXBfZGYuaW5kZXg6CiAgICAgICAgICAgIGNtaXNfbnVtID0gZGYuYXRbaWR4LCAiT0NTIl0KICAgICAgICAgICAgY2hfbnVtID0gZGYuYXRbaWR4LCAibGFuZSJdCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBwZC5pc25hKGNtaXNfbnVtKSBvciBwZC5pc25hKGNoX251bSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgY21pc19udW0gPSBpbnQoY21pc19udW0pCiAgICAgICAgICAgICAgICBjaF9udW0gPSBpbnQoY2hfbnVtKQogICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAKICAgICAgICAgICAgc3dhYl9kYXRhID0gc3dhYl9kaWN0LmdldCgoY21pc19udW0sIGNoX251bSksIHt9KQogICAgICAgICAgICBpZiBhbnkoc3dhYl9kYXRhLnZhbHVlcygpKToKICAgICAgICAgICAgICAgIGZpbGxlZF9jb3VudCArPSAxCiAgICAgICAgICAgIGRmLmF0W2lkeCwgInN3Yl9vbmV0Yl9oIl0gPSBzd2FiX2RhdGEuZ2V0KCJzd2Jfb25ldGJfaCIpCiAgICAgICAgICAgIGRmLmF0W2lkeCwgInN3Yl9vbmV0YV9oIl0gPSBzd2FiX2RhdGEuZ2V0KCJzd2Jfb25ldGFfaCIpCiAgICAgICAgICAgIGRmLmF0W2lkeCwgInN3YV9vbm9jX2giXSA9IHN3YWJfZGF0YS5nZXQoInN3YV9vbm9jX2giKQogICAgICAgICAgICBkZi5hdFtpZHgsICJzd2Ffb25ldF9o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ICAKICAgICAgICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ub2RlIOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS10ZXN0KQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBydW5fYWxsPWZhbHNlCiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZSBbWyAkIyAtZ3QgMCAmJiAhICIkMSIgPX4gXi0tIF1dOyBkbwogICAgICAgICAgICAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgICAgICAgICAgICAgcmVzZXRfZ3B1KQogICAgICAgICAgICAgICAgICAgICAgICByZXNldF9ncHVfZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG8pCiAgICAgICAgICAgICAgICAgICAgICAgIHNldF90b3BvX2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8muS4jeaUr+aMgeeahOa1i+ivleWPguaVsCAnJDEn77yM5LuF5pSv5oyBIHJlc2V0X2dwdSDmiJYgc2V0X3RvcG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGVjaG8gIumUmeivr++8muacquefpeWPguaVsCAnJDEn77yM5pSv5oyB55qE5Y+C5pWw77yaLS1ub2RlIDznvJblj7c+IC0tdGVzdCBbcmVzZXRfZ3B1fHNldF90b3BvLi4uXSIKICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIDs7CiAgICBlc2FjCmRvbmUKCiMg5qCh6aqM5L6d6LWW5ZKM6YWN572u5paH5Lu2CmlmICEgY29tbWFuZCAtdiBqcSAmPiAvZGV2L251bGw7IHRoZW4KICAgIGVjaG8gIumUmeivr++8muacquWuieijhSBqcSDlt6XlhbfvvIzor7flhYjmiafooYwgJ3l1bSBpbnN0YWxsIGpxIC15JyDmiJYgJ2FwdCBpbnN0YWxsIGpxIC15JyDlronoo4UiCiAgICBleGl0IDEKZmkKaWYgW1sgLXogIiR0YXJnZXRfc3Rhcl9ub2RlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5b+F6aG76YCa6L+HIC0tbm9kZSDmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgZXhpdCAxCmZpCmlmIFtbICEgLWYgIiRjb25maWdfZmlsZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tiAkY29uZmlnX2ZpbGUg5LiN5a2Y5Zyo77yM6K+35qOA5p+l6Lev5b6EIgogICAgZXhpdCAxCmZpCgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKCiMg5qCh6aqM6YWN572u5a6M5pW05oCnCmlmIFtbICIkbm9kZTFfaXAiID09ICJudWxsIiB8fCAteiAiJG5vZGUxX2lwIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu25Lit5pyq5om+5YiwIHN0YXJfbm9kZT0kdGFyZ2V0X3N0YXJfbm9kZSDnmoTmnInmlYjphY3nva4iCiAgICBleGl0IDEKZmkKCgpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3Mvc3RyZXNzLTQtNi04X2xpbmtzX29uZXRiX3JlY292ZXJ5X0NNSVMtbW9uXyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VUR1BVIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9ncHUoKSB7ICAKICAgIGFjdGl2ZV9yZW1vdGUxPSQxCiAgICBncHVfY291bnQ9OAogICAgZWNobyAtZSAiXG4tLS0tLS06UkVTRVQgJGFjdGl2ZV9yZW1vdGUxIEdQVSAtLS0tLS0iID4mMgogICAgZm9yICgoaT0xOyBpPD0zOyBpKyspKTsgZG8KICAgICAgICByZXN0X2dwdT0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkYWN0aXZlX3JlbW90ZTEgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcImJyc21pIHJlc2V0IC1nXCIiJyAyPiYxKQogICAgICAgIGVjaG8gInJlc2V0ICRhY3RpdmVfcmVtb3RlMSBHUFU6IiA+JjIKICAgICAgICBlY2hvICIkcmVzdF9ncHUiID4mMiAgICAKICAgICAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJHJlc3RfZ3B1IiB8IGdyZXAgLWMgIkdQVVswLTddIFN1Y2Nlc3NlZC4iKQogICAgICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgc3VjY2VzcyIgPiYyCiAgICAgICAgICAgIGJyZWFrICAgICAgICAKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBmYWlsIiA+JjIKICAgICAgICAgICAgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCAyMAogICAgZG9uZQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkaXNhYmxlX2FsbF9sdHNzbSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlzYWJsZV9hbGxfbHRzc20oKSB7ICAgCiAgICBub2RlX2lwPSQxICAgIAogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVSBwb3J05piv5ZCm6YeN572u5oiQ5YqfCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19sb2NhbGdwdSIgfCBncmVwIC1jRSAnXkdQVSBbMC03XSwgSFdcW1swLTldK1xdOiBkaXNhYmxlIGx0c3NtIFwoMiwgNCwgNiwgOCwgMTBcKSBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgpkaXNhYmxlX3BvcnRfbHRzc20oKSB7CiAgICBub2RlX2lwPSQxCiAgICBub2RlX3BvcnQ9JDIKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBwb3J0JG5vZGVfcG9ydCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVeaYr+WQpumHjee9ruaIkOWKnyAgICAKICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2dwdXBvcnQiIHwgZ3JlcCAtYyAnSFdcW1swLTddXF06IGRpc2FibGUgbHRzc20gJyRub2RlX3BvcnQnIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VURVhQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9leHAoKSB7ICAgCiAgICBsb2NhbCBob3N0PSIkMSIKICAgIGxvY2FsIHBvcnQ9IiQyIiAgCiAgICBlY2hvICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgc2xlZXAgMwogICAgZWNobyAiY2hlayBFWFAgc3RhdC4uLiIKICAgIGV4cF9zdGF0ZT0kKCRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHN0YXQgMj4mMSkJCiAgICBlY2hvICJleHAgc3RhdGU6IgogICAgZWNobyAiJGV4cF9zdGF0ZSIgCiAgICB0aW1fc3dfdGltZT0kKGVjaG8gIiRleHBfc3RhdGUiIHwgZ3JlcCAiVElNX1NXOiIgfCBzZWQgLW4gJ3MvLipUSU1fU1c6IFwoW14sXSpcKS4qL1wxL3AnKQogICAgc2VjX3BhcnQ9JChlY2hvICIkdGltX3N3X3RpbWUiIHwgYXdrIC1GJzonICd7cHJpbnQgJE5GfScpCiAgICBzZWNvbmRzX3N0cj0kKGVjaG8gIiRzZWNfcGFydCIgfCB0ciAtZCAnXG4nIHwgZ3JlcCAtb0UgJ1swLTldKycgfCBoZWFkIC1uMSkKICAgIGlmIFtbICIkc2Vjb25kc19zdHIiID1+IF5bMC05XSskIF1dOyB0aGVuCiAgICAgICAgc2Vjb25kcz0kKCgxMCMkc2Vjb25kc19zdHIpKQogICAgZWxzZQogICAgICAgIGVjaG8gIuenkuaVsOagvOW8j+aXoOaViO+8iOaPkOWPluWAvDogWyRzZWNvbmRzX3N0cl0sIOinhuS4ukZBSUwiICAgICAgICAKICAgICAgICBjb250aW51ZQogICAgZmkKICAgICMg5Yik5pat57uT5p6cCiAgICBpZiBbICIkc2Vjb25kcyIgLWx0IDUgXTsgdGhlbiAgICAgICAgCiAgICAgICAgZWNobyAtZSAiRVhQIHJlc2V0IHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvICJUSU1fU1c6ICRzZWNvbmRzIHMsIEVYUCByZXNldCBGQUlMIiAKICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbj0iR1BVIEVYUCByZXNldCBGQUlMIiAKICAgICAgICByZXR1cm4gMgogICAgZmkKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjbG9hZCBCTC0xNiB0b3BvIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpsb2FkX2JsMTZfdG9wbygpIHsKICAgIG5vZGVfaXA9JDEgICAgIAogICAgZWNobyAtZSAiXG4tLS0tbG9hZC1ncHUtdG9wbyAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzdwLmpzb25cIiInCiAgICAgICAKICAgIG91dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfN3AuanNvblwiIicgMj4mMSkKICAgIHNsZWVwIDEKICAgIGVjaG8gImxvYWQgdG9wbyByZXN1bHQ6IgogICAgZWNobyAiJG91dHB1dCIgICAgCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjTElOS1VQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpvbmV0X2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGUxX2lwPSQxCiAgICBsb2NhbCBub2RlMV9wb3J0PSQyCiAgICBsb2NhbCBub2RlMl9pcD0kMwogICAgbG9jYWwgbm9kZTJfcG9ydD0kNCAgIAoKICAgIGVjaG8gLWUgIlxuLS0tLU9ORVQtIExJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAKICAgIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicgJgogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCm9ub2NfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZV9pcD0kMQogICAgbG9jYWwgbm9kZV9wb3J0PSQyCgogICAgZWNobyAtZSAiXG4tLS0tT05PQy1MSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicKICAgICAgICAgICAgCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJyAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGVfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0dQVVNQRUVEIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpncHVfc3BlZWQoKSB7CiAgICBob3N0PSQxCiAgICBwb3J0PSQyCgogICAgIy0tLS0tLS0tLS0tIGNoZWNrIGFsbCBHUFUgcG9ydCBpcyBHRU41WDggb3Igbm90LS0tLS0tLS0tLS0tLQogICAgZWNobyAtZSAiXG4tLS0tT05FVEEtIGNoZWNrIGFsbCBHUFUgcG9ydCAkcG9ydCBpcyBHRU41WDggb3Igbm90IC0tLS0iIAogICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8gICAgICAgCiAgICAgICAgR0VONV9wYXR0ZXJuPSJQb3J0ICRwb3J0OiBHRU46IDUsIFdpZHRoOiA4IgogICAgICAgIGV4cGVjdGVkX2NvdW50PTggICAgICAgIAogICAgICAgIGxpbmsxX2Z1bGw9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLWNcIiInKQogICAgICAgIGxpbmsxX0dFTj0kKGVjaG8gIiRsaW5rMV9mdWxsIiB8IGdyZXAgICJQb3J0ICRwb3J0IiAyPiYxKSAKICAgICAgICBlY2hvIC1lICJsaW5rMTpcbiAkbGluazFfR0VOIgogICAgICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX0dFTiIgfCBncmVwIC1jICIkR0VONV9wYXR0ZXJuIiAyPiYxKQogICAgICAgIGVjaG8gImxpbmsxIGdlbjUgY291bnQ6ICRsaW5rMV9jb3VudCIJCiAgICAgICAgaWYgWyAkbGluazFfY291bnQgLWVxICRleHBlY3RlZF9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBzdWNjZXNzIgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb249IlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDYKICAgIGRvbmUKfQoKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8gIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IOWOi+a1i2xpbmt1cCDmtYvor5XnrKwkaSDova4gPT09PT09PT09PT09PT09IgogICAgZWNobyAgICAKICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICBmYWlsX3JlYXNvbj0iIgogICAgCiAgICAjIyMjIyMjIyMjI3NldCA0RyBUT1BPIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGlmIFsgIiRzZXRfdG9wb19mbGFnIiA9IHRydWUgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlxuPT09PT09IHNldCA0RyB0b29wID09PT09PSIKICAgICAgICBlY2hvCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNiBvbm9jNyAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgOCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNiBvbm9jNyAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgOCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNiBvbm9jNyAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgOCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNiBvbm9jNyAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgOCBvbmV0YSAmCiAgICAgICAgd2FpdAogICAgICAgIGVjaG8gICAgICAgIAogICAgZmkKCiAgICAjUkVTRVQgNEcgR1BVCiAgICBpZiBbICIkcmVzZXRfZ3B1X2ZsYWciID0gdHJ1ZSBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiXG49PT09PT0gcmVzZXQgNEcgR1BVID09PT09PSIKICAgICAgICBlY2hvCiAgICAgICAgZWNobyBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTFfaXAgJgogICAgICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMl9pcCAmCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUzX2lwICYKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTRfaXAgJgogICAgICAgIHdhaXQKICAgICAgICBzbGVlcCAzCiAgICAgICAgZWNobwogICAgZmkKCiAgICAjZGlzYWJsZV9hbGxfbHRzc20KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLS0tIGRpc2FibGUgbHRzc20gLS0tLS0tIgogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvICAgICAgICAKICAgICAgICBpZiAhIGRpc2FibGVfcG9ydF9sdHNzbSAiJG5vZGUiIDg7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBkaXNhYmxlIHBvcnQgZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgIHNsZWVwIDEKICAgIAogICAgI1JFU0VURVhQCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1yZXNldCBleHAgLS0tLSIgCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvZXhwX2NvbGRfcmVzZXQucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDgpCiAgICBzbGVlcCAxCiAgICAKICAgICNsb2FkaW5nIEJMLTE2IHRvcG8KICAgIG5vZGVzPSgiJG5vZGUxX2lwIiAiJG5vZGUyX2lwIiAiJG5vZGUzX2lwIiAiJG5vZGU0X2lwIikgICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAgICAgICAgCiAgICAgICAgaWYgISBsb2FkX2JsMTZfdG9wbyAiJG5vZGUiOyB0aGVuCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBHUFUgbG9hZCB0b3BvIGZhaWwgb24gbm9kZSAkbm9kZTsgIgogICAgICAgIGZpICAgICAgICAKICAgIGRvbmUKCiAgICAjT0NTLVNDUkVFTgogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tb2NzX3NjcmVlbiBiZWZvcmUgbGlua3VwLS0tLSIgCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQoKICAgICNvbmV0IGxpbmt1cAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjgiICRub2RlMl9pcCAiOCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBvbmV0IHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAKICAgIHNsZWVwIDIgIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTNfaXAgIjgiICRub2RlNF9pcCAiOCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBvbmV0IHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAgCiAgICBzbGVlcCAyIAogICAgCiAgICAjb25vYyBsaW5rdXAKICAgIG5vZGVzPSgiJG5vZGUxX2lwIiAiJG5vZGUyX2lwIiAiJG5vZGUzX2lwIiAiJG5vZGU0X2lwIikgCiAgICBwb3J0cz0oMiA0IDYpICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAKICAgICAgICBmb3IgcG9ydCBpbiAiJHtwb3J0c1tAXX0iOyBkbyAgICAgIAogICAgICAgICAgICBpZiAhIG9ub2NfbGlua3VwICRub2RlICRwb3J0OyB0aGVuCiAgICAgICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgb25vYyBsaW5rdXAgZmFpbDsgIgogICAgICAgICAgICBmaSAKICAgICAgICBkb25lICAgICAgIAogICAgZG9uZQoKICAgICNvY3Mtc2NyZWVuCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS1zbGVlcCAxMHMgb2NzX3NjcmVlbiAtLS0tIgogICAgc2xlZXAgMTAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MiwkYm1jX2hvc3QyIC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCiAgICBzbGVlcCA2CiAgICAjU0xFRVAgNjBTIG9jcy1zY3JlZW4KICAgICMgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgNjBzIG9jc19zY3JlZW4gLS0tLSIKICAgICMgc2xlZXAgNjAKICAgICMgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QyLCRibWNfaG9zdDIgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKICAgIAogICAgIyMjI3Jlc3VsdCMjIyAgICAgICAgCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS0g5pys6L2u5rWL6K+V57uT5p6cIC0tLS0iCiAgICBpZiBbICIkY3VycmVudF9zdWNjZXNz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ICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCmZpcnN0X25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgpzZWNvbmRfbm9kZT0iJCgodGFyZ2V0X3N0YXJfbm9kZSArIDQpKSIKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU1X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU2X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU3X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU4X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZThfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q1PSQoZWNobyAiJG5vZGU1X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nj0kKGVjaG8gIiRub2RlNl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDc9JChlY2hvICIkbm9kZTdfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q4PSQoZWNobyAiJG5vZGU4X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKY29udmVydF9ub2RlKCkgewogICAgbG9jYWwgaW5wdXRfbm9kZT0iJDEiCiAgICBsb2NhbCBzdGFydF9ub2RlPSIkMiIKICAgIGxvY2FsIG5vZGVfc3VmZml4CiAgICBsb2NhbCB0YXJnZXRfbm9kZV9udW0KICAgIGxvY2FsIHRhcmdldF9ub2RlICAgIAogICAgbm9kZV9zdWZmaXg9JChlY2hvICIkaW5wdXRfbm9kZSIgfCBzZWQgLW5FICdzL15ub2RlKFswLTldKykkL1wxL3AnKQoKICAgIGlmIFtbIC16ICIkbm9kZV9zdWZmaXgiIF1dOyB0aGVuCiAgICAgICAgZWNobyAi6ZSZ6K+v77ya6L6T5YWlIG5vZGUg5qC85byP5peg5pWI77yM6ZyA5Li6ICdub2RlK+aVsOWtlyfvvIjlpoIgbm9kZTHjgIFub2RlMu+8iSIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICBpZiAhIFtbICIkc3RhcnRfbm9kZSIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrotbflp4vlgY/np7vph4/pnIDkuLrmraPmlbTmlbAiID4mMgogICAgICAgIHJldHVybiAxCiAgICBmaQogICAgCiAgICB0YXJnZXRfbm9kZV9udW09JCgobm9kZV9zdWZmaXggKyBzdGFydF9ub2RlIC0gMSkpCiAgICB0YXJnZXRfbm9kZT0ibm9kZSR0YXJnZXRfbm9kZV9udW0iCiAgICBlY2hvICIkdGFyZ2V0X25vZGUiCiAgICByZXR1cm4gMAp9CgoKY29sbGVjdF9vbmV0X2Nyb3NzKCkgewogICAgbG9jYWwgYWN0aXZlX2JtYz0iJDEiCiAgICBsb2NhbCBhY3RpdmVfYm1jaXA9IiR7IWFjdGl2ZV9ibWN9IiAgCiAgICBsb2NhbCBfYWN0aXZlX25vZGU9IiR7YWN0aXZlX2JtYyVfYm1jfSIKICAgIGxvY2FsIGFjdGl2ZV9wb3J0PSQyCiAgICBsb2NhbCBjcm9zc19ibWM9JDMKICAgIGxvY2FsIGNyb3NzX2JtY2lwPSIkeyFjcm9zc19ibWN9IiAgCiAgICBsb2NhbCBfY3Jvc3Nfbm9kZT0iJHtjcm9zc19ibWMlX2JtY30iCiAgICBsb2NhbCBjcm9zc19wb3J0PSQ0CiAgICBsb2NhbCBhY3RpdmVfaG9zdD0iaHR0cHM6Ly8kYWN0aXZlX2JtY2lwIgogICAgbG9jYWwgY3Jvc3NfaG9zdD0iaHR0cHM6Ly8kY3Jvc3NfYm1jaXAiCgogICAgbG9jYWwgYWN0aXZlX25vZGU9JChjb252ZXJ0X25vZGUgJF9hY3RpdmVfbm9kZSAkc3Rhcl9ub2RlKQogICAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2Nyb3NzX25vZGUgJHN0YXJfbm9kZSkKICAKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0ID09PT09PT09PT09PT09PSIKICAgICNhY3RpdmF0ZV9vY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lICAKICAgICNkaXNhYmxlIG9jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHhmZiAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCiAgICAKICAgIGVjaG8gLWUgIlxud2FpdCAxMHMsIG9jcyBzdGFibGUuLi4iCiAgICBzbGVlcCAxMAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCBkYXRhIC0tLS0tIgogICAgbG9jYWwgYWN0aXZlX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGFjdGl2ZV9ibWNpcCAtZSAkYWN0aXZlX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICBsb2NhbCBjcm9zc19wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRjcm9zc19ibWNpcCAtZSAkY3Jvc3NfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9jbWlzICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X2NtaXMiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9jbWlzICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9jbWlzIgogICAgc2xlZXAgMgogICAgbG9jYWwgY3Jvc3NfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgMj4mMSkKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpCiAgICAgICAgICAgIAogICAgIyDosIPor5XovpPlh7rvvIjmjInpnIDlvIDlkK/vvIkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X3Jzc2kgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X3Jzc2kiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfcnNzaSAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9yc3NpIgogICAgICAgIAogICAgZWNobyAtZSAiXG4tLS0tIOiwg+eUqCBQeXRob24g5YiG5p6QICRhY3RpdmVfcG9ydCDmlbDmja4gLS0tLSIgICAgCiAgICBleHBvcnQgQ1NWX0ZJTEU9IiRjc3ZfZmlsZSIKICAgIGV4cG9ydCBMT09QPSIkaSIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVD0iJGFjdGl2ZV9ub2RlLVAkYWN0aXZlX3BvcnQiIAogICAgZXhwb3J0IENST1NTX1BPUlQ9IiRjcm9zc19ub2RlLVAkY3Jvc3NfcG9ydCIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVF9SU1NJPSIkYWN0aXZlX3BvcnRfcnNzaSIgQUNUSVZFX1BPUlRfQ01JUz0iJGFjdGl2ZV9wb3J0X2NtaXMiIAogICAgZXhwb3J0IENST1NTX1BPUlRfUlNTST0iJGNyb3NzX3BvcnRfcnNzaSIgQ1JPU1NfUE9SVF9DTUlTPSIkY3Jvc3NfcG9ydF9jbWlzIgoKICAgIHB5dGhvbjMgY29sbGVjdF90ZXN0X2RhdGFfb25vY19yc3NpLnB5IAogICAgCiAgICB1bnNldCBDU1ZfRklMRSBMT09QIEFDVElWRV9CTUMgQUNUSVZFX1BPUlQgQ1JPU1NfQk1DIENST1NTX1BPUlQKICAgIHVuc2V0IEFDVElWRV9QT1JUX1JTU0kgQUNUSVZFX1BPUlRfQ01JUyBDUk9TU19QT1JUX1JTU0kgQ1JPU1NfUE9SVF9DTUlTICAgIAoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmVfYm1jIGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQg5pWw5o2u5aSE55CG5a6M5oiQID09PT09PT09PT09PT09PVxuIgogICAgc2xlZXAgMgoJIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmUgY3Jvc3NfcG9ydCA9PT09PT09PT09PT09PT1cbiIKICAgICNhY3RpdmUgY3Jvc3NfcG9ydCAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGNyb3NzX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCQp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKY3N2X2ZpbGU9ImNzdl9kYXRhLzY0X3h6LW9uZXRfc3diLWNyb3NzdGFsay1hX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmRlYnVnX21vZGU9MQoKZWNobyAtZSAiXG49PT09PT0gc2V0IHNwbm9kZTEgIHRvcG8gPT09PT09IgplY2hvCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNCBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDYgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDQgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA2IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNCBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDYgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA4IG9ub2M2ICYKZWNobwplY2hvIC1lICJcbj09PT09PSBzZXQgc3Bub2RlMiAgdG9wbyA9PT09PT0iCmVjaG8KI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTVfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU1X2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTVfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNl9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTZfYm1jIDQgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyA2IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNl9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU3X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlN19ibWMgNCBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDYgb25ldGIgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU3X2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZThfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU4X2JtYyA0IG9uZXRiICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgNiBvbmV0YiAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZThfYm1jIDggb25vYzYgJgp3YWl0CmVjaG8gICAgICAgIAoKCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbwogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT0g56ysICRpIOi9ruW+queOryA9PT09PT09PT09PT09PT09PT09PT0iCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCgogICAgI3Nwbm9kZTEKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlOF9ibWMgNCBub2RlNl9ibWMgNAoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU2X2JtYyA0IG5vZGU4X2JtYyA0CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZThfYm1jIDYgbm9kZTVfYm1jIDYKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNV9ibWMgNiBub2RlOF9ibWMgNgogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU3X2JtYyA0IG5vZGU1X2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTVfYm1jIDQgbm9kZTdfYm1jIDQKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlN19ibWMgNiBub2RlNl9ibWMgNgoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU2X2JtYyA2IG5vZGU3X2JtYyA2CiAgICAjc3Bub2RlMgogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU0X2JtYyA0IG5vZGUyX2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTJfYm1jIDQgbm9kZTRfYm1jIDQKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNF9ibWMgNiBub2RlMV9ibWMgNgoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGUxX2JtYyA2IG5vZGU0X2JtYyA2CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTNfYm1jIDQgbm9kZTFfYm1jIDQKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlMV9ibWMgNCBub2RlM19ibWMgNAogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGUzX2JtYyA2IG5vZGUyX2JtYyA2Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTJfYm1jIDYgbm9kZTNfYm1jIDYKZG9uZQplY2hvIC1lICJcbuaJgOacieW+queOr+aJp+ihjOWujOaIkCzmlbDmja7lt7Lkv53lrZjoh7M6JGNzdl9maWxlIgpjaG1vZCAtUiA3NTUgY3N2X2RhdGEvCiMg6K6w5b2V57uT5p2f5pe26Ze0CmVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8gIi0tLS0tLSDmtYvor5Xnu5PmnZ/kuo46ICQoZGF0ZSkgLS0tLS0tIgplY2hvICItLS0tLS0g5a6M5pW057uT5p6c5bey5L+d5a2Y5Yiw5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgLS0tLS0iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdG9feWQvNjRfeHotb25vY19zd2EtY3Jvc3N0YWxrX29jc19yc3NpLnNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDE2NzE0ADE1MTIwNzI2NjM3ADAxNzczNQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS9iaW4vYmFzaAoKIyBjb25maWd1cmUKcm9vdF91c2VyPSJyb290Igpyb290X3Bzc3dkPSJSQ21zQFp0ZTMiCnJlbW90ZV91c2VyPSJwaWN0IgpyZW1vdGVfcHNzd2Q9IlBpY1QxITJAMyM0JCIKZXhwX3Rvb2w9Ii4vc21idXMtdG9vbC9idWlsZC93aGl0ZXJpdmVyX2V4cC5leGUiCndhaXRfdGltZT0xMApsb29wX3RpbWVzPTEwMAoKcmVzZXRfZ3B1X2ZsYWc9ZmFsc2UKc2V0X3RvcG9fZmxhZz1mYWxzZQpydW5fYWxsPXRydWUgCgpjb25maWdfZmlsZT0ibm9kZV9jb25maWdzLmpzb24iICAKdGFyZ2V0X3N0YXJfbm9kZT0iIgpub2RlMV9pcD0iIgpub2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCgpjb2xsZWN0X29ub2NfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSIkMSIKICAgIGxvY2FsIGFjdGl2ZV9ibWNpcD0iJHshYWN0aXZlX2JtY30iICAKICAgIGxvY2FsIF9hY3RpdmVfbm9kZT0iJHthY3RpdmVfYm1jJV9ibWN9IgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDIKICAgIGxvY2FsIGNyb3NzX2JtYz0kMwogICAgbG9jYWwgY3Jvc3NfYm1jaXA9IiR7IWNyb3NzX2JtY30iICAKICAgIGxvY2FsIF9jcm9zc19ub2RlPSIke2Nyb3NzX2JtYyVfYm1jfSIKICAgIGxvY2FsIGNyb3NzX3BvcnQ9JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jaXAiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWNpcCIKCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2FjdGl2ZV9ub2RlICRzdGFyX25vZGUpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoY29udmVydF9ub2RlICRfY3Jvc3Nfbm9kZSAkc3Rhcl9ub2RlKQogIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUgIAogICAgI2Rpc2FibGUgb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG53YWl0IDEwcywgb2NzIHN0YWJsZS4uLiIKICAgIHNsZWVwIDEwCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IGRhdGEgLS0tLS0iCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtY2lwIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgIGxvY2FsIGNyb3NzX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGNyb3NzX2JtY2lwIC1lICRjcm9zc19wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X2NtaXMgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X2NtaXMiCiAgICBzbGVlcCAyCiAgICBsb2NhbCBjcm9zc19wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAyPiYxKQogICAgbG9jYWwgYWN0aXZlX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgMj4mMSkKICAgICAgICAgICAgCiAgICAjIOiwg+ivlei+k+WHuu+8iOaMiemcgOW8gOWQr++8iQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfcnNzaSAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfcnNzaSIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9yc3NpICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X3Jzc2kiCiAgICAgICAgCiAgICBlY2hvIC1lICJcbi0tLS0g6LCD55SoIFB5dGhvbiDliIbmnpAgJGFjdGl2ZV9wb3J0IOaVsOaNriAtLS0tIiAgICAKICAgIGV4cG9ydCBDU1ZfRklMRT0iJGNzdl9maWxlIgogICAgZXhwb3J0IExPT1A9IiRpIgogICAgZXhwb3J0IEFDVElWRV9QT1JUPSIkYWN0aXZlX25vZGUtUCRhY3RpdmVfcG9ydCIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVD0iJGNyb3NzX25vZGUtUCRjcm9zc19wb3J0IgogICAgZXhwb3J0IEFDVElWRV9QT1JUX1JTU0k9IiRhY3RpdmVfcG9ydF9yc3NpIiBBQ1RJVkVfUE9SVF9DTUlTPSIkYWN0aXZlX3BvcnRfY21pcyIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVF9SU1NJPSIkY3Jvc3NfcG9ydF9yc3NpIiBDUk9TU19QT1JUX0NNSVM9IiRjcm9zc19wb3J0X2NtaXMiCgogICAgcHl0aG9uMyBjb2xsZWN0X3Rlc3RfZGF0YV9vbm9jX3Jzc2kucHkgCiAgICAKICAgIHVuc2V0IENTVl9GSUxFIExPT1AgQUNUSVZFX0JNQyBBQ1RJVkVfUE9SVCBDUk9TU19CTUMgQ1JPU1NfUE9SVAogICAgdW5zZXQgQUNUSVZFX1BPUlRfUlNTSSBBQ1RJVkVfUE9SVF9DTUlTIENST1NTX1BPUlRfUlNTSSBDUk9TU19QT1JUX0NNSVMgICAgCgogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZV9ibWMgYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCDmlbDmja7lpITnkIblrozmiJAgPT09PT09PT09PT09PT09XG4iCiAgICBzbGVlcCAyICAKfQpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvNjJfc3RyZXNzXzEzLTE2LW9ub2NfY2hlY2tfb2NzcG93ZXJfJChkYXRlICslWSVtJWRfJUglTSVTKS5sb2ciCmNzdl9maWxlPSJjc3ZfZGF0YS82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmRlYnVnX21vZGU9MQoKZm9yICgoaT0xOyBpPD0kbG9vcF90aW1lczsgaSsrKSk7IGRvCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PSDnrKwgJGkg6L2u5b6q546vID09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKCiAgICAjcG9ydCA4CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTFfYm1jIDggbm9kZTJfYm1jIDggICAgCiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDggbm9kZTFfYm1jIDgKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlM19ibWMgOCBub2RlNF9ibWMgOAogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA4IG5vZGUzX2JtYyA4CiAgICAjcG9ydDQKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgNCBub2RlM19ibWMgNCAgICAKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlM19ibWMgNCBub2RlMV9ibWMgNAogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUyX2JtYyA0IG5vZGU0X2JtYyA0CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTRfYm1jIDQgbm9kZTJfYm1jIDQKICAgICNwb3J0NgogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUxX2JtYyA2IG5vZGU0X2JtYyA2ICAgIAogICAgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA2IG5vZGUxX2JtYyA2CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDYgbm9kZTNfYm1jIDYKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlM19ibWMgNiBub2RlMl9ibWMgNgogICAgCmRvbmUKZWNobyAtZSAiXG7miYDmnInlvqrnjq/miafooYzlrozmiJAs5pWw5o2u5bey5L+d5a2Y6IezOiRjc3ZfZmlsZSIKY2htb2QgLVIgNzU1IGNzdl9kYXRhLwojIOiusOW9lee7k+adn+aXtumXtAplY2hvIC1lICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvICItLS0tLS0g5rWL6K+V57uT5p2f5LqOOiAkKGRhdGUpIC0tLS0tLSIKZWNobyAiLS0tLS0tIOWujOaVtOe7k+aenOW3suS/neWtmOWIsOaXpeW/l+aWh+S7tjogJExPR19GSUxFIC0tLS0tIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b195ZC82Nl94el9CTC0zMl9sdHNzbV9saW5rdXBfb25ldGEuc2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1MAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMzc1NDEAMTUxMjA3MjY2MzcAMDE3MDE0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL2Jpbi9iYXNoCgojIOWfuuehgOmFjee9ru+8iOmdnuiKgueCueebuOWFs++8iQpyb290X3VzZXI9InJvb3QiCnJvb3RfcHNzd2Q9IlJDbXNAWnRlMyIKcmVtb3RlX3VzZXI9InBpY3QiCnJlbW90ZV9wc3N3ZD0iUGljVDEhMkAzIzQkIgpleHBfdG9vbD0iLi9zbWJ1cy10b29sL2J1aWxkL3doaXRlcml2ZXJfZXhwLmV4ZSIKd2FpdF90aW1lPTEwCmxvb3BfdGltZXM9MTAwCgojIOWKn+iDveWPguaVsOagh+ivhgpyZXNldF9ncHVfZmxhZz1mYWxzZQpzZXRfdG9wb19mbGFnPWZhbHNlCnJ1bl9hbGw9dHJ1ZSAKCiMg6IqC54K56YWN572u55u45YWz5Y+Y6YePCmNvbmZpZ19maWxlPSJub2RlX2NvbmZpZ3MuanNvbiIgIAp0YXJnZXRfc3Rhcl9ub2RlPSIiCm5vZGUxX2lwPSIiCm5vZGUxX2JtYz0iIgpub2RlMl9pcD0iIgpub2RlMl9ibWM9IiIKbm9kZTNfaXA9IiIKbm9kZTNfYm1jPSIiCm5vZGU0X2lwPSIiCm5vZGU0X2JtYz0iIgpzdGFyX25vZGU9IiIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI+WPguaVsOino+aekCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgIyDmoKHpqowtLW5vZGXlj4LmlbDmnInmlYjmgKcKICAgICAgICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ub2RlIOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS10ZXN0KQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBydW5fYWxsPWZhbHNlCiAgICAgICAgICAgICMg5aSE55CGLS10ZXN05ZCO5aSa5Liq5Y+C5pWwCiAgICAgICAgICAgIHdoaWxlIFtbICQjIC1ndCAwICYmICEgIiQxIiA9fiBeLS0gXV07IGRvCiAgICAgICAgICAgICAgICBjYXNlICIkMSIgaW4KICAgICAgICAgICAgICAgICAgICByZXNldF9ncHUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2dwdV9mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBzZXRfdG9wbykKICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG9fZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5LiN5pSv5oyB55qE5rWL6K+V5Y+C5pWwICckMSfvvIzku4XmlK/mjIEgcmVzZXRfZ3B1IOaIliBzZXRfdG9wbyIKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICckMSfvvIzmlK/mjIHnmoTlj4LmlbDvvJotLW5vZGUgPOe8luWPtz4gLS10ZXN0IFtyZXNldF9ncHV8c2V0X3RvcG8uLi5dIgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj5Yqg6L29SlNPTumFjee9riMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3Mvc3RyZXNzLTQtNi04X2xpbmtzX29uZXRiX3JlY292ZXJ5X0NNSVMtbW9uXyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VUR1BVIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9ncHUoKSB7ICAKICAgIGFjdGl2ZV9yZW1vdGUxPSQxCiAgICBncHVfY291bnQ9OAogICAgZWNobyAtZSAiXG4tLS0tLS06UkVTRVQgJGFjdGl2ZV9yZW1vdGUxIEdQVSAtLS0tLS0iID4mMgogICAgZm9yICgoaT0xOyBpPD0zOyBpKyspKTsgZG8KICAgICAgICByZXN0X2dwdT0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkYWN0aXZlX3JlbW90ZTEgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcImJyc21pIHJlc2V0IC1nXCIiJyAyPiYxKQogICAgICAgIGVjaG8gInJlc2V0ICRhY3RpdmVfcmVtb3RlMSBHUFU6IiA+JjIKICAgICAgICBlY2hvICIkcmVzdF9ncHUiID4mMiAgICAKICAgICAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJHJlc3RfZ3B1IiB8IGdyZXAgLWMgIkdQVVswLTddIFN1Y2Nlc3NlZC4iKQogICAgICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgc3VjY2VzcyIgPiYyCiAgICAgICAgICAgIGJyZWFrICAgICAgICAKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBmYWlsIiA+JjIgICAgICAgICAgICAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDIwCiAgICBkb25lCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkaXNhYmxlX2FsbF9sdHNzbSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlzYWJsZV9hbGxfbHRzc20oKSB7ICAgCiAgICBub2RlX2lwPSQxICAgIAogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9sdHNzbSAtZFwiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVSBwb3J05piv5ZCm6YeN572u5oiQ5YqfCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19sb2NhbGdwdSIgfCBncmVwIC1jRSAnXkdQVSBbMC03XSwgSFdcW1swLTldK1xdOiBkaXNhYmxlIGx0c3NtIFwoMiwgNCwgNiwgOCwgMTBcKSBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgpkaXNhYmxlX3BvcnRfbHRzc20oKSB7CiAgICBub2RlX2lwPSQxCiAgICBub2RlX3BvcnQ9JDIKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIicpICAgCiAgIAogICAgZWNobyAibm9kZS0kbm9kZV9pcCBwb3J0JG5vZGVfcG9ydCBkaXNhYmxlIHN0YXR1czoiCiAgICBlY2hvICIkZGlzX2dwdXBvcnQiCiAgICAjIOajgOafpWxvY2FsIOaJgOaciUdQVeaYr+WQpumHjee9ruaIkOWKnyAgICAKICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2dwdXBvcnQiIHwgZ3JlcCAtYyAnSFdcW1swLTddXF06IGRpc2FibGUgbHRzc20gJyRub2RlX3BvcnQnIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1JFU0VURVhQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpyZXNldF9leHAoKSB7ICAgCiAgICBsb2NhbCBob3N0PSIkMSIKICAgIGxvY2FsIHBvcnQ9IiQyIiAgCiAgICBlY2hvICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgc2xlZXAgMwogICAgZWNobyAiY2hlayBFWFAgc3RhdC4uLiIKICAgIGV4cF9zdGF0ZT0kKCRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHN0YXQgMj4mMSkJCiAgICBlY2hvICJleHAgc3RhdGU6IgogICAgZWNobyAiJGV4cF9zdGF0ZSIgCiAgICB0aW1fc3dfdGltZT0kKGVjaG8gIiRleHBfc3RhdGUiIHwgZ3JlcCAiVElNX1NXOiIgfCBzZWQgLW4gJ3MvLipUSU1fU1c6IFwoW14sXSpcKS4qL1wxL3AnKQogICAgc2VjX3BhcnQ9JChlY2hvICIkdGltX3N3X3RpbWUiIHwgYXdrIC1GJzonICd7cHJpbnQgJE5GfScpCiAgICBzZWNvbmRzX3N0cj0kKGVjaG8gIiRzZWNfcGFydCIgfCB0ciAtZCAnXG4nIHwgZ3JlcCAtb0UgJ1swLTldKycgfCBoZWFkIC1uMSkKICAgIGlmIFtbICIkc2Vjb25kc19zdHIiID1+IF5bMC05XSskIF1dOyB0aGVuCiAgICAgICAgc2Vjb25kcz0kKCgxMCMkc2Vjb25kc19zdHIpKQogICAgZWxzZQogICAgICAgIGVjaG8gIuenkuaVsOagvOW8j+aXoOaViO+8iOaPkOWPluWAvDogWyRzZWNvbmRzX3N0cl0sIOinhuS4ukZBSUwiICAgICAgICAKICAgICAgICBjb250aW51ZQogICAgZmkKICAgICMg5Yik5pat57uT5p6cCiAgICBpZiBbICIkc2Vjb25kcyIgLWx0IDUgXTsgdGhlbiAgICAgICAgCiAgICAgICAgZWNobyAtZSAiRVhQIHJlc2V0IHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvICJUSU1fU1c6ICRzZWNvbmRzIHMsIEVYUCByZXNldCBGQUlMIiAKICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbj0iR1BVIEVYUCByZXNldCBGQUlMIiAKICAgICAgICByZXR1cm4gMgogICAgZmkKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjbG9hZCBncHUgdG9wbyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKbG9hZF9ncHV0b3BvKCkgewogICAgbm9kZV9pcD0kMSAKICAgIGdwdV90b3BvPSQyCiAgICBlY2hvIC1lICJcbi0tLS1sb2FkLWdwdS10b3BvIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfNnBfMzIuanNvblwiIicKICAgICAgIAogICAgb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF82cF8zMi5qc29uXCIiJyAyPiYxKQogICAgc2xlZXAgMQogICAgZWNobyAibG9hZCB0b3BvIHJlc3VsdDoiCiAgICBlY2hvICIkb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICAjIGh3aWRfY291bnQ9OAogICAgIyBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgIyBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgIyAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgc3VjY2VzcyIKICAgICMgICAgIHJldHVybiAwIAogICAgIyBlbHNlCiAgICAjICAgICBlY2hvICJSRVRSQUlOIExJTksgMSByZWFkeSBGQUlMIgogICAgIyAgICAgcmV0dXJuIDAgCiAgICAjIGZpIAp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNMSU5LVVAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm9uZXRfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZTFfaXA9JDEKICAgIGxvY2FsIG5vZGUxX3BvcnQ9JDIKICAgIGxvY2FsIG5vZGUyX2lwPSQzCiAgICBsb2NhbCBub2RlMl9wb3J0PSQ0ICAgCgogICAgZWNobyAtZSAiXG4tLS0tT05FVC0gTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgIAogICAgc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJyAmCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlMl9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKb25vY19saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlX2lwPSQxCiAgICBsb2NhbCBub2RlX3BvcnQ9JDIKCiAgICBlY2hvIC1lICJcbi0tLS1PTk9DLUxJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJwogICAgICAgICAgICAKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZV9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjR1BVU1BFRUQjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmdwdV9zcGVlZCgpIHsKICAgIGhvc3Q9JDEKICAgIHBvcnQ9JDIKCiAgICAjLS0tLS0tLS0tLS0gY2hlY2sgYWxsIEdQVSBwb3J0IGlzIEdFTjVYOCBvciBub3QtLS0tLS0tLS0tLS0tCiAgICBlY2hvIC1lICJcbi0tLS1PTkVUQS0gY2hlY2sgYWxsIEdQVSBwb3J0ICRwb3J0IGlzIEdFTjVYOCBvciBub3QgLS0tLSIgCiAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbyAgICAgICAKICAgICAgICBHRU41X3BhdHRlcm49IlBvcnQgJHBvcnQ6IEdFTjogNSwgV2lkdGg6IDgiCiAgICAgICAgZXhwZWN0ZWRfY291bnQ9OCAgICAgICAgCiAgICAgICAgbGluazFfZnVsbD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtY1wiIicpCiAgICAgICAgbGluazFfR0VOPSQoZWNobyAiJGxpbmsxX2Z1bGwiIHwgZ3JlcCAgIlBvcnQgJHBvcnQiIDI+JjEpIAogICAgICAgIGVjaG8gLWUgImxpbmsxOlxuICRsaW5rMV9HRU4iCiAgICAgICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfR0VOIiB8IGdyZXAgLWMgIiRHRU41X3BhdHRlcm4iIDI+JjEpCiAgICAgICAgZWNobyAibGluazEgZ2VuNSBjb3VudDogJGxpbmsxX2NvdW50IgkKICAgICAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGV4cGVjdGVkX2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IHN1Y2Nlc3MiCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbj0iUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgNgogICAgZG9uZQp9CgojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbyAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0g5Y6L5rWLbGlua3VwIOa1i+ivleesrCRpIOi9riA9PT09PT09PT09PT09PT0iCiAgICBlY2hvICAgIAogICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgIGZhaWxfcmVhc29uPSIiCiAgICAgICAgCiAgICAjIyMjIyMjIyMjI3NldCA0RyBUT1BPIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGlmIFsgIiRzZXRfdG9wb19mbGFnIiA9IHRydWUgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlxuPT09PT09IHNldCA0RyB0b29wID09PT09PSIKICAgICAgICBlY2hvCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgNiBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgOCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNiBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgOCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNiBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgOCBvbm9jNiAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgMiBvbm9jNSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNCBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgNiBvbmV0YSAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgOCBvbm9jNiAmCiAgICAgICAgd2FpdAogICAgICAgIGVjaG8gICAgICAgIAogICAgZmkKCiAgICAjUkVTRVQgNEcgR1BVCiAgICBlY2hvIC1lICJcbj09PT09PSByZXNldCA0RyBHUFUgPT09PT09IgogICAgaWYgWyAiJHJlc2V0X2dwdV9mbGFnIiA9IHRydWUgXTsgdGhlbiAgICAgICAgCiAgICAgICAgZWNobwogICAgICAgIGVjaG8gYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwICYKICAgICAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTJfaXAgJgogICAgICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlM19pcCAmCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGU0X2lwICYKICAgICAgICB3YWl0CiAgICAgICAgc2xlZXAgMwogICAgICAgIGVjaG8KICAgIGZpCgogICAgI2Rpc2FibGVfYWxsX2x0c3NtCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS0tLSBSRVNFVCAgR1BVIC0tLS0tLSIKICAgIG5vZGVzPSgiJG5vZGUxX2lwIiAiJG5vZGUyX2lwIiAiJG5vZGUzX2lwIiAiJG5vZGU0X2lwIikgICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAgICAgICAgCiAgICAgICAgaWYgISBkaXNhYmxlX2FsbF9sdHNzbSAiJG5vZGUiOyB0aGVuCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBHUFUgZGlzYWJsZSBwb3J0IGZhaWwgb24gbm9kZSAkbm9kZTsgIgogICAgICAgIGZpICAgICAgICAKICAgIGRvbmUKCiAgICBzbGVlcCAxCiAgICAKICAgICNSRVNFVEVYUAogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tcmVzZXQgZXhwIC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL2V4cF9jb2xkX3Jlc2V0LnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4KQogICAgc2xlZXAgMQogICAgCiAgICAjbG9hZGluZyBHUFUgdG9wbwogICAgbm9kZXM9KCIkbm9kZTFfaXAiICIkbm9kZTJfaXAiICIkbm9kZTNfaXAiICIkbm9kZTRfaXAiKSAgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvICAgICAgICAKICAgICAgICBpZiAhIGxvYWRfZ3B1dG9wbyAiJG5vZGUiICIvd29ya3NwYWNlL3pkcy9tZXNoXzZwXzMyLmpzb24iOyB0aGVuCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBHUFUgbG9hZCB0b3BvIGZhaWwgb24gbm9kZSAkbm9kZTsgIgogICAgICAgIGZpICAgICAgICAKICAgIGRvbmUKCiAgICAjICNPQ1MtU0NSRUVOCiAgICAjIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLW9jc19zY3JlZW4gYmVmb3JlIGxpbmt1cC0tLS0iIAogICAgIyAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQoKICAgICNvbmV0IGxpbmt1cAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjQiICRub2RlM19pcCAiNCI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgCiAgICBzbGVlcCAyICAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUyX2lwICI0IiAkbm9kZTRfaXAgIjQiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgICAKICAgIHNsZWVwIDIgCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMV9pcCAiNiIgJG5vZGU0X2lwICI2IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAKICAgIHNsZWVwIDIgIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTJfaXAgIjYiICRub2RlM19pcCAiNiI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgIAogICAgc2xlZXAgMiAKCiAgICAjb25vYyBsaW5rdXAKICAgIG5vZGVzPSgiJG5vZGUxX2lwIiAiJG5vZGUyX2lwIiAiJG5vZGUzX2lwIiAiJG5vZGU0X2lwIikgCiAgICBwb3J0cz0oMiA4KSAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gCiAgICAgICAgZm9yIHBvcnQgaW4gIiR7cG9ydHNbQF19IjsgZG8gICAgICAKICAgICAgICAgICAgaWYgISBvbm9jX2xpbmt1cCAkbm9kZSAkcG9ydDsgdGhlbgogICAgICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IG9ub2MgbGlua3VwIGZhaWw7ICIKICAgICAgICAgICAgICAgIHNsZWVwIDIKICAgICAgICAgICAgZmkgCiAgICAgICAgZG9uZSAgICAgICAKICAgIGRvbmUKCiAgICAjb2NzLXNjcmVlbgogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgMTBzIG9jc19zY3JlZW4gLS0tLSIKICAgIHNsZWVwIDEwCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQogICAgc2xlZXAgNgogICAgIyAjU0xFRVAgNjBTIG9jcy1zY3JlZW4KICAgICMgZWNobyAtZSAiXG5b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X25vZGU9IiIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI+WPguaVsOino+aekCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgIyDmoKHpqowtLW5vZGXlj4LmlbDmnInmlYjmgKcKICAgICAgICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ub2RlIOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS10ZXN0KQogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBydW5fYWxsPWZhbHNlCiAgICAgICAgICAgICMg5aSE55CGLS10ZXN05ZCO5aSa5Liq5Y+C5pWwCiAgICAgICAgICAgIHdoaWxlIFtbICQjIC1ndCAwICYmICEgIiQxIiA9fiBeLS0gXV07IGRvCiAgICAgICAgICAgICAgICBjYXNlICIkMSIgaW4KICAgICAgICAgICAgICAgICAgICByZXNldF9ncHUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2dwdV9mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICBzZXRfdG9wbykKICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG9fZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5LiN5pSv5oyB55qE5rWL6K+V5Y+C5pWwICckMSfvvIzku4XmlK/mjIEgcmVzZXRfZ3B1IOaIliBzZXRfdG9wbyIKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICckMSfvvIzmlK/mjIHnmoTlj4LmlbDvvJotLW5vZGUgPOe8luWPtz4gLS10ZXN0IFtyZXNldF9ncHV8c2V0X3RvcG8uLi5dIgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj5Yqg6L29SlNPTumFjee9riMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvbjE4X29ub2NfbGlua3VwX3N0cmVzc18kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEdQVSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZ3B1KCkgeyAgCiAgICBhY3RpdmVfcmVtb3RlMT0kMQogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gLWUgIlxuLS0tLS0tOlJFU0VUICRhY3RpdmVfcmVtb3RlMSBHUFUgLS0tLS0tIiA+JjIKICAgIGZvciAoKGk9MTsgaTw9MzsgaSsrKSk7IGRvCiAgICAgICAgcmVzdF9ncHU9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJGFjdGl2ZV9yZW1vdGUxICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJicnNtaSByZXNldCAtZ1wiIicgMj4mMSkKICAgICAgICBlY2hvICJyZXNldCAkYWN0aXZlX3JlbW90ZTEgR1BVOiIgPiYyCiAgICAgICAgZWNobyAiJHJlc3RfZ3B1IiA+JjIgICAgCiAgICAgICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRyZXN0X2dwdSIgfCBncmVwIC1jICJHUFVbMC03XSBTdWNjZXNzZWQuIikKICAgICAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIHN1Y2Nlc3MiID4mMgogICAgICAgICAgICBicmVhayAgICAgICAgCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgZmFpbCIgPiYyICAgICAgICAgICAgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCAyMAogICAgZG9uZQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGlzYWJsZV9hbGxfbHRzc20jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpc2FibGVfYWxsX2x0c3NtKCkgeyAgIAogICAgbm9kZV9pcD0kMSAgICAKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFUgcG9ydOaYr+WQpumHjee9ruaIkOWKnwogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfbG9jYWxncHUiIHwgZ3JlcCAtY0UgJ15HUFUgWzAtN10sIEhXXFtbMC05XStcXTogZGlzYWJsZSBsdHNzbSBcKDIsIDQsIDYsIDgsIDEwXCkgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKZGlzYWJsZV9wb3J0X2x0c3NtKCkgewogICAgbm9kZV9pcD0kMQogICAgbm9kZV9wb3J0PSQyCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgcG9ydCRub2RlX3BvcnQgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFXmmK/lkKbph43nva7miJDlip8gICAgCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19ncHVwb3J0IiB8IGdyZXAgLWMgJ0hXXFtbMC03XVxdOiBkaXNhYmxlIGx0c3NtICckbm9kZV9wb3J0JyBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEVYUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZXhwKCkgeyAgIAogICAgbG9jYWwgaG9zdD0iJDEiCiAgICBsb2NhbCBwb3J0PSIkMiIgIAogICAgZWNobyAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgIHNsZWVwIDMKICAgIGVjaG8gImNoZWsgRVhQIHN0YXQuLi4iCiAgICBleHBfc3RhdGU9JCgkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCBzdGF0IDI+JjEpCQogICAgZWNobyAiZXhwIHN0YXRlOiIKICAgIGVjaG8gIiRleHBfc3RhdGUiIAogICAgdGltX3N3X3RpbWU9JChlY2hvICIkZXhwX3N0YXRlIiB8IGdyZXAgIlRJTV9TVzoiIHwgc2VkIC1uICdzLy4qVElNX1NXOiBcKFteLF0qXCkuKi9cMS9wJykKICAgIHNlY19wYXJ0PSQoZWNobyAiJHRpbV9zd190aW1lIiB8IGF3ayAtRic6JyAne3ByaW50ICRORn0nKQogICAgc2Vjb25kc19zdHI9JChlY2hvICIkc2VjX3BhcnQiIHwgdHIgLWQgJ1xuJyB8IGdyZXAgLW9FICdbMC05XSsnIHwgaGVhZCAtbjEpCiAgICBpZiBbWyAiJHNlY29uZHNfc3RyIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIHNlY29uZHM9JCgoMTAjJHNlY29uZHNfc3RyKSkKICAgIGVsc2UKICAgICAgICBlY2hvICLnp5LmlbDmoLzlvI/ml6DmlYjvvIjmj5Dlj5blgLw6IFskc2Vjb25kc19zdHJdLCDop4bkuLpGQUlMIiAgICAgICAgCiAgICAgICAgY29udGludWUKICAgIGZpCiAgICAjIOWIpOaWree7k+aenAogICAgaWYgWyAiJHNlY29uZHMiIC1sdCA1IF07IHRoZW4gICAgICAgIAogICAgICAgIGVjaG8gLWUgIkVYUCByZXNldCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAiVElNX1NXOiAkc2Vjb25kcyBzLCBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb249IkdQVSBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgcmV0dXJuIDIKICAgIGZpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2xvYWQgZ3B1IHRvcG8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfZ3B1dG9wbygpIHsKICAgIG5vZGVfaXA9JDEgCiAgICBncHVfdG9wbz0kMgogICAgZWNobyAtZSAiXG4tLS0tbG9hZC1ncHUtdG9wbyAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzZwXzMyLmpzb25cIiInCiAgICAgICAKICAgIG91dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfNnBfMzIuanNvblwiIicgMj4mMSkKICAgIHNsZWVwIDEKICAgIGVjaG8gImxvYWQgdG9wbyByZXN1bHQ6IgogICAgZWNobyAiJG91dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgIyBod2lkX2NvdW50PTgKICAgICMgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGUyX3BvcnRcXTogUmVhZHkiKSAgICAKICAgICMgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICMgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAjICAgICByZXR1cm4gMCAKICAgICMgZWxzZQogICAgIyAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICMgICAgIHJldHVybiAwIAogICAgIyBmaSAKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjTElOS1VQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpvbmV0X2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGUxX2lwPSQxCiAgICBsb2NhbCBub2RlMV9wb3J0PSQyCiAgICBsb2NhbCBub2RlMl9pcD0kMwogICAgbG9jYWwgbm9kZTJfcG9ydD0kNCAgIAoKICAgIGVjaG8gLWUgIlxuLS0tLU9ORVQtIExJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAKICAgIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicgJgogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCm9ub2NfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZV9pcD0kMQogICAgbG9jYWwgbm9kZV9wb3J0PSQyCgogICAgZWNobyAtZSAiXG4tLS0tT05PQy1MSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicKICAgICAgICAgICAgCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJyAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGVfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0dQVVNQRUVEIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpncHVfc3BlZWQoKSB7CiAgICBob3N0PSQxCiAgICBwb3J0PSQyCgogICAgIy0tLS0tLS0tLS0tIGNoZWNrIGFsbCBHUFUgcG9ydCBpcyBHRU41WDggb3Igbm90LS0tLS0tLS0tLS0tLQogICAgZWNobyAtZSAiXG4tLS0tT05FVEEtIGNoZWNrIGFsbCBHUFUgcG9ydCAkcG9ydCBpcyBHRU41WDggb3Igbm90IC0tLS0iIAogICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8gICAgICAgCiAgICAgICAgR0VONV9wYXR0ZXJuPSJQb3J0ICRwb3J0OiBHRU46IDUsIFdpZHRoOiA4IgogICAgICAgIGV4cGVjdGVkX2NvdW50PTggICAgICAgIAogICAgICAgIGxpbmsxX2Z1bGw9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLWNcIiInKQogICAgICAgIGxpbmsxX0dFTj0kKGVjaG8gIiRsaW5rMV9mdWxsIiB8IGdyZXAgICJQb3J0ICRwb3J0IiAyPiYxKSAKICAgICAgICBlY2hvIC1lICJsaW5rMTpcbiAkbGluazFfR0VOIgogICAgICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX0dFTiIgfCBncmVwIC1jICIkR0VONV9wYXR0ZXJuIiAyPiYxKQogICAgICAgIGVjaG8gImxpbmsxIGdlbjUgY291bnQ6ICRsaW5rMV9jb3VudCIJCiAgICAgICAgaWYgWyAkbGluazFfY291bnQgLWVxICRleHBlY3RlZF9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBzdWNjZXNzIgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb249IlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDYKICAgIGRvbmUKfQoKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8gIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IOWOi+a1i2xpbmt1cCDmtYvor5XnrKwkaSDova4gPT09PT09PT09PT09PT09IgogICAgZWNobyAgICAKICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICBmYWlsX3JlYXNvbj0iIgogICAgICAgIAogICAgIyMjIyMjIyMjIyNzZXQgNEcgVE9QTyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBpZiBbICIkc2V0X3RvcG9fZmxhZyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbj09PT09PSBzZXQgNEcgdG9vcCA9PT09PT0iCiAgICAgICAgZWNobwogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDIgb25vYzUgJgogICAgICAgICNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA0IG9ub2M2ICYKICAgICAgICAjYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNiBvbm9jNyAmCiAgICAgICAgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgOCBvbm9jNiAmCiAgICAgICAgd2FpdAogICAgICAgIGVjaG8gICAgICAgIAogICAgZmkKCiAgICAjUkVTRVQgNEcgR1BVCiAgICBlY2hvIC1lICJcbj09PT09PSByZXNldCA0RyBHUFUgPT09PT09IgogICAgaWYgWyAiJHJlc2V0X2dwdV9mbGFnIiA9IHRydWUgXTsgdGhlbiAgICAgICAgCiAgICAgICAgZWNobwogICAgICAgIGVjaG8gYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwCiAgICAgICAgI2Jhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcCAmCiAgICAgICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUyX2lwICYKICAgICAgICAjYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUzX2lwICYKICAgICAgICAjYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGU0X2lwICYKICAgICAgICB3YWl0CiAgICAgICAgc2xlZXAgMwogICAgICAgIGVjaG8KICAgIGZpCgogICAgI2Rpc2FibGVfYWxsX2x0c3NtCiAgICBlY2hvIC1lICJcblskKGRhdGUgKyIlWS0lbS0lZCAlSDolTTolUyIpXS0tLS0tLSBSRVNFVCAgR1BVIC0tLS0tLSIKICAgIG5vZGVzPSgiJG5vZGUyX2lwIikgICAgCiAgICBmb3Igbm9kZSBpbiAiJHtub2Rlc1tAXX0iOyBkbyAgICAgICAgCiAgICAgICAgaWYgISBkaXNhYmxlX2FsbF9sdHNzbSAiJG5vZGUiOyB0aGVuCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBHUFUgZGlzYWJsZSBwb3J0IGZhaWwgb24gbm9kZSAkbm9kZTsgIgogICAgICAgIGZpICAgICAgICAKICAgIGRvbmUKCiAgICBzbGVlcCAxCiAgICAKICAgICNSRVNFVEVYUAogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tcmVzZXQgZXhwIC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL2V4cF9jb2xkX3Jlc2V0LnB5IC0taG9zdCAkYm1jX2hvc3QyIC0tcG9ydCAyLDgpCiAgICBzbGVlcCAxCiAgICAKICAgICNsb2FkaW5nIEdQVSB0b3BvCiAgICBub2Rlcz0oIiRub2RlMl9pcCIpICAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gICAgICAgIAogICAgICAgIGlmICEgbG9hZF9ncHV0b3BvICIkbm9kZSIgIi93b3Jrc3BhY2UvemRzL21lc2hfNnBfMzIuanNvbiI7IHRoZW4KICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgIGZhaWxfcmVhc29uKz0iIEdQVSBsb2FkIHRvcG8gZmFpbCBvbiBub2RlICRub2RlOyAiCiAgICAgICAgZmkgICAgICAgIAogICAgZG9uZQoKICAgICMgI09DUy1TQ1JFRU4KICAgICMgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tb2NzX3NjcmVlbiBiZWZvcmUgbGlua3VwLS0tLSIgCiAgICAjIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCgogICAgI29uZXQgbGlua3VwCiAgICAjaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjQiICRub2RlM19pcCAiNCI7IHRoZW4KICAgICMgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAjICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgICNmaSAgCiAgICAjc2xlZXAgMiAgCiAgICAjaWYgISBvbmV0X2xpbmt1cCAkbm9kZTJfaXAgIjQiICRub2RlNF9pcCAiNCI7IHRoZW4KICAgICMgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAjICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgICNmaSAgIAogICAgI3NsZWVwIDIgCiAgICAjaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjYiICRub2RlNF9pcCAiNiI7IHRoZW4KICAgICMgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAjICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgICNmaSAgCiAgICAjc2xlZXAgMiAgCiAgICAjaWYgISBvbmV0X2xpbmt1cCAkbm9kZTJfaXAgIjYiICRub2RlM19pcCAiNiI7IHRoZW4KICAgICMgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAjICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgICNmaSAgIAogICAgI3NsZWVwIDIgCgogICAgI29ub2MgbGlua3VwCiAgICBub2Rlcz0oIiRub2RlMl9pcCIpIAogICAgcG9ydHM9KDIgOCkgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvIAogICAgICAgIGZvciBwb3J0IGluICIke3BvcnRzW0BdfSI7IGRvICAgICAgCiAgICAgICAgICAgIGlmICEgb25vY19saW5rdXAgJG5vZGUgJHBvcnQ7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBvbm9jIGxpbmt1cCBmYWlsOyAiCiAgICAgICAgICAgICAgICBzbGVlcCAyCiAgICAgICAgICAgIGZpIAogICAgICAgIGRvbmUgICAgICAgCiAgICBkb25lCgogICAgI29jcy1zY3JlZW4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDEwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICBzbGVlcCAxMAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDIgLS1wb3J0IDIsOCAtLXNraXAgZXJyb3IpCQogICAgc2xlZXAgNgogICAgIyAjU0xFRVAgNjBTIG9jcy1zY3JlZW4KICAgICMgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgNjBzIG9jc19zY3JlZW4gLS0tLSIKICAgICMgc2xlZXAgNjAKICAgICMgKGNkIHNtYnVzLXRv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b2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgICAgIC0tdGVzdCkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgcnVuX2FsbD1mYWxzZQogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgW1sgJCMgLWd0IDAgJiYgISAiJDEiID1+IF4tLSBdXTsgZG8KICAgICAgICAgICAgICAgIGNhc2UgIiQxIiBpbgogICAgICAgICAgICAgICAgICAgIHNldF90b3BvKQogICAgICAgICAgICAgICAgICAgICAgICBzZXRfdG9wb19mbGFnPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJrkuI3mlK/mjIHnmoTmtYvor5Xlj4LmlbAgJyQxJ++8jOS7heaUr+aMgSBzZXRfdG9wbyIKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBzaGlmdAogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICckMSfvvIzmlK/mjIHnmoTlj4LmlbDvvJotLW5vZGUgPOe8luWPtz4gLS10ZXN0IFtyZXNldF9ncHV8c2V0X3RvcG8uLi5dIgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCiMg5LuOSlNPTuivu+WPlumFjee9ru+8iGpx6Kej5p6Q77yJCm5vZGUxX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMV9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpzdGFyX25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgoKYm1jX2hvc3QxPSQoZWNobyAiJG5vZGUxX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mj0kKGVjaG8gIiRub2RlMl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDM9JChlY2hvICIkbm9kZTNfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q0PSQoZWNobyAiJG5vZGU0X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKCkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy9zdHJlc3MtNC02LThfbGlua3Nfb25ldGJfcmVjb3ZlcnlfQ01JUy1tb25fJChkYXRlICslWSVtJWRfJUglTSVTKS5sb2ciCiMg5ZCM5pe26L6T5Ye65Yiw57uI56uv5ZKM5pel5b+X5paH5Lu2CmV4ZWMgPiA+KHRlZSAtYSAiJExPR19GSUxFIikgMj4mMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRHUFUjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2dwdSgpIHsgIAogICAgYWN0aXZlX3JlbW90ZTE9JDEKICAgIGdwdV9jb3VudD04CiAgICBlY2hvIC1lICJcbi0tLS0tLTpSRVNFVCAkYWN0aXZlX3JlbW90ZTEgR1BVIC0tLS0tLSIgPiYyCiAgICBmb3IgKChpPTE7IGk8PTM7IGkrKykpOyBkbwogICAgICAgIHJlc3RfZ3B1PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRhY3RpdmVfcmVtb3RlMSAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiYnJzbWkgcmVzZXQgLWdcIiInIDI+JjEpCiAgICAgICAgZWNobyAicmVzZXQgJGFjdGl2ZV9yZW1vdGUxIEdQVToiID4mMgogICAgICAgIGVjaG8gIiRyZXN0X2dwdSIgPiYyICAgIAogICAgICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkcmVzdF9ncHUiIHwgZ3JlcCAtYyAiR1BVWzAtN10gU3VjY2Vzc2VkLiIpCiAgICAgICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgInRpbWVzJGk6IEdQVSBSRVNFVCBzdWNjZXNzIiA+JjIKICAgICAgICAgICAgYnJlYWsgICAgICAgIAogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIGZhaWwiID4mMgogICAgICAgICAgICAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDIwCiAgICBkb25lCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2Rpc2FibGVfYWxsX2x0c3NtIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaXNhYmxlX2FsbF9sdHNzbSgpIHsgICAKICAgIG5vZGVfaXA9JDEgICAgCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJyIKICAgIGRpc19ncHVwb3J0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL2x0c3NtIC1kXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BVIHBvcnTmmK/lkKbph43nva7miJDlip8KICAgIHN1Y2Nlc3NfY291bnQ9JChlY2hvICIkZGlzX2xvY2FsZ3B1IiB8IGdyZXAgLWNFICdeR1BVIFswLTddLCBIV1xbWzAtOV0rXF06IGRpc2FibGUgbHRzc20gXCgyLCA0LCA2LCA4LCAxMFwpIGRvbmUkJykgIAogICAgaWYgWyAkc3VjY2Vzc19jb3VudCAtZXEgJGdwdV9jb3VudCBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiR1BVIFJFU0VUIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UKICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgRkFJTCIKICAgICAgICByZXR1cm4gMgogICAgZmkgICAgCiAgICBzbGVlcCAxCn0KCmRpc2FibGVfcG9ydF9sdHNzbSgpIHsKICAgIG5vZGVfaXA9JDEKICAgIG5vZGVfcG9ydD0kMgogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gInNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vc2NyaXB0cy9kaXNhYmxlX3BvcnRfbHRzc20gJyRub2RlX3BvcnQnXCIiJykgICAKICAgCiAgICBlY2hvICJub2RlLSRub2RlX2lwIHBvcnQkbm9kZV9wb3J0IGRpc2FibGUgc3RhdHVzOiIKICAgIGVjaG8gIiRkaXNfZ3B1cG9ydCIKICAgICMg5qOA5p+lbG9jYWwg5omA5pyJR1BV5piv5ZCm6YeN572u5oiQ5YqfICAgIAogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfZ3B1cG9ydCIgfCBncmVwIC1jICdIV1xbWzAtN11cXTogZGlzYWJsZSBsdHNzbSAnJG5vZGVfcG9ydCcgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJkaXNhYmxlIHBvcnQgbHRzc20gc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjUkVTRVRFWFAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlc2V0X2V4cCgpIHsgICAKICAgIGxvY2FsIGhvc3Q9IiQxIgogICAgbG9jYWwgcG9ydD0iJDIiICAKICAgIGVjaG8gJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgICRleHBfdG9vbCAtLWhvc3QgJGhvc3QgLS1wb3J0ICRwb3J0IC0tY21kIHJlc2V0IC0tcGFyYW0gImNsb2QgcHJpIiAyPiYxCiAgICBzbGVlcCAzCiAgICBlY2hvICJjaGVrIEVYUCBzdGF0Li4uIgogICAgZXhwX3N0YXRlPSQoJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgc3RhdCAyPiYxKQkKICAgIGVjaG8gImV4cCBzdGF0ZToiCiAgICBlY2hvICIkZXhwX3N0YXRlIiAKICAgIHRpbV9zd190aW1lPSQoZWNobyAiJGV4cF9zdGF0ZSIgfCBncmVwICJUSU1fU1c6IiB8IHNlZCAtbiAncy8uKlRJTV9TVzogXChbXixdKlwpLiovXDEvcCcpCiAgICBzZWNfcGFydD0kKGVjaG8gIiR0aW1fc3dfdGltZSIgfCBhd2sgLUYnOicgJ3twcmludCAkTkZ9JykKICAgIHNlY29uZHNfc3RyPSQoZWNobyAiJHNlY19wYXJ0IiB8IHRyIC1kICdcbicgfCBncmVwIC1vRSAnWzAtOV0rJyB8IGhlYWQgLW4xKQogICAgaWYgW1sgIiRzZWNvbmRzX3N0ciIgPX4gXlswLTldKyQgXV07IHRoZW4KICAgICAgICBzZWNvbmRzPSQoKDEwIyRzZWNvbmRzX3N0cikpCiAgICBlbHNlCiAgICAgICAgZWNobyAi56eS5pWw5qC85byP5peg5pWI77yI5o+Q5Y+W5YC8OiBbJHNlY29uZHNfc3RyXSwg6KeG5Li6RkFJTCIgICAgICAgIAogICAgICAgIGNvbnRpbnVlCiAgICBmaQogICAgIyDliKTmlq3nu5PmnpwKICAgIGlmIFsgIiRzZWNvbmRzIiAtbHQgNSBdOyB0aGVuICAgICAgICAKICAgICAgICBlY2hvIC1lICJFWFAgcmVzZXQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gIlRJTV9TVzogJHNlY29uZHMgcywgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uPSJHUFUgRVhQIHJlc2V0IEZBSUwiIAogICAgICAgIHJldHVybiAyCiAgICBmaQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNsb2FkIEJMLTE2IHRvcG8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfYmwxNl90b3BvKCkgewogICAgbm9kZV9pcD0kMSAgICAgCiAgICBlY2hvIC1lICJcbi0tLS1sb2FkLWdwdS10b3BvIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfN3AuanNvblwiIicKICAgICAgIAogICAgb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL29jc1RvcG8gLXMgbWVzaF83cC5qc29uXCIiJyAyPiYxKQogICAgc2xlZXAgMQogICAgZWNobyAibG9hZCB0b3BvIHJlc3VsdDoiCiAgICBlY2hvICIkb3V0cHV0IiAgICAKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNMSU5LVVAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm9uZXRfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZTFfaXA9JDEKICAgIGxvY2FsIG5vZGUxX3BvcnQ9JDIKICAgIGxvY2FsIG5vZGUyX2lwPSQzCiAgICBsb2NhbCBub2RlMl9wb3J0PSQ0ICAgCgogICAgZWNobyAtZSAiXG4tLS0tT05FVC0gTElOS1VQIC0tLS0iICAgCgkjbGluayAxIHRyYW5pbmcgICAgCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgIAogICAgc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUxX3BvcnQnXCIiJyAmCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUyX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTJfcG9ydCdcIiInCiAgICAgIDI+JjEpCiAgICBzbGVlcCAyCiAgICBlY2hvICJsaW5rMSB0cmFpbjoiCiAgICBlY2hvICIkbGluazFfb3V0cHV0IiAKICAgICMjIGNoZWNrIGFsbCBIV0lEIHBvcnQgcmVhZHkgb3Igbm90CiAgICBod2lkX2NvdW50PTgKICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX291dHB1dCIgfCBncmVwIC1jICJIV0lEIFswLTddIFBvcnRcWyRub2RlMl9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKb25vY19saW5rdXAoKSB7CiAgICBsb2NhbCBub2RlX2lwPSQxCiAgICBsb2NhbCBub2RlX3BvcnQ9JDIKCiAgICBlY2hvIC1lICJcbi0tLS1PTk9DLUxJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJwogICAgICAgICAgICAKICAgIGxpbmsxX291dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGVfcG9ydCdcIiInICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZV9wb3J0XF06IFJlYWR5IikgICAgCiAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGh3aWRfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAgICAgcmV0dXJuIDAgCiAgICBlbHNlCiAgICAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICAgICByZXR1cm4gMCAKICAgIGZpIAoKICAgIHNsZWVwIDEKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjR1BVU1BFRUQjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmdwdV9zcGVlZCgpIHsKICAgIGhvc3Q9JDEKICAgIHBvcnQ9JDIKCiAgICAjLS0tLS0tLS0tLS0gY2hlY2sgYWxsIEdQVSBwb3J0IGlzIEdFTjVYOCBvciBub3QtLS0tLS0tLS0tLS0tCiAgICBlY2hvIC1lICJcbi0tLS1PTkVUQS0gY2hlY2sgYWxsIEdQVSBwb3J0ICRwb3J0IGlzIEdFTjVYOCBvciBub3QgLS0tLSIgCiAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbyAgICAgICAKICAgICAgICBHRU41X3BhdHRlcm49IlBvcnQgJHBvcnQ6IEdFTjogNSwgV2lkdGg6IDgiCiAgICAgICAgZXhwZWN0ZWRfY291bnQ9OCAgICAgICAgCiAgICAgICAgbGluazFfZnVsbD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtY1wiIicpCiAgICAgICAgbGluazFfR0VOPSQoZWNobyAiJGxpbmsxX2Z1bGwiIHwgZ3JlcCAgIlBvcnQgJHBvcnQiIDI+JjEpIAogICAgICAgIGVjaG8gLWUgImxpbmsxOlxuICRsaW5rMV9HRU4iCiAgICAgICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfR0VOIiB8IGdyZXAgLWMgIiRHRU41X3BhdHRlcm4iIDI+JjEpCiAgICAgICAgZWNobyAibGluazEgZ2VuNSBjb3VudDogJGxpbmsxX2NvdW50IgkKICAgICAgICBpZiBbICRsaW5rMV9jb3VudCAtZXEgJGV4cGVjdGVkX2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IHN1Y2Nlc3MiCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBHRU41WDggRkFJTCIgCiAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICBmYWlsX3JlYXNvbj0iUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgIGZpCiAgICAgICAgc2xlZXAgNgogICAgZG9uZQp9CgojIOiusOW9leW8gOWni+aXtumXtAplY2hvICI9PT0g5rWL6K+V5byA5aeL5LqOOiAkKGRhdGUpID09PSIKZWNobyAiPT09IOaXpeW/l+aWh+S7tjogJExPR19GSUxFID09PSIKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT0iCmVjaG8KCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbyAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0g5Y6L5rWLbGlua3VwIOa1i+ivleesrCRpIOi9riA9PT09PT09PT09PT09PT0iCiAgICBlY2hvICAgIAogICAgY3VycmVudF9zdWNjZXNzPXRydWUKICAgIGZhaWxfcmVhc29uPSIiCiAgICAKICAgICMjIyMjIyMjIyMjc2V0IDRHIFRPUE8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgaWYgWyAiJHNldF90b3BvX2ZsYWciID0gdHJ1ZSBdOyB0aGVuCiAgICAgICAgZWNobyAtZSAiXG49PT09PT0gc2V0IDRHIHRvb3AgPT09PT09IgogICAgICAgIGVjaG8KICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA4IG9uZXRhICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyAyIG9ub2M1ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA0IG9ub2M2ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA2IG9ub2M3ICYKICAgICAgICBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA4IG9uZXRhICYKICAgICAgICB3YWl0CiAgICAgICAgZWNobyAgICAgICAgCiAgICBmaQoKICAgICNSRVNFVCA0RyBHUFUKICAgIGVjaG8gLWUgIlxuPT09PT09IHJlc2V0IDRHIEdQVSA9PT09PT0iCiAgICBlY2hvCiAgICBlY2hvIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcAogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwICYKICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMl9pcCAmCiAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTNfaXAgJgogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGU0X2lwICYKICAgIHdhaXQKICAgIHNsZWVwIDMKICAgIGVjaG8KCiAgICAjUkVTRVRFWFAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXJlc2V0IGV4cCAtLS0tIiAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9leHBfY29sZF9yZXNldC5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCkKICAgIHNsZWVwIDEKIAogICAgI09DUy1TQ1JFRU4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLW9jc19zY3JlZW4gYmVmb3JlIGxpbmt1cC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKCiAgICAjb25ldCBsaW5rdXAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUxX2lwICI4IiAkbm9kZTJfaXAgIjgiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgb25ldCBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgCiAgICBzbGVlcCAyICAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUzX2lwICI4IiAkbm9kZTRfaXAgIjgiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgb25ldCBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgIAogICAgc2xlZXAgMiAKICAgIAogICAgI29ub2MgbGlua3VwCiAgICBub2Rlcz0oIiRub2RlMV9pcCIgIiRub2RlMl9pcCIgIiRub2RlM19pcCIgIiRub2RlNF9pcCIpIAogICAgcG9ydHM9KDIgNCA2KSAgIAogICAgZm9yIG5vZGUgaW4gIiR7bm9kZXNbQF19IjsgZG8gCiAgICAgICAgZm9yIHBvcnQgaW4gIiR7cG9ydHNbQF19IjsgZG8gICAgICAKICAgICAgICAgICAgaWYgISBvbm9jX2xpbmt1cCAkbm9kZSAkcG9ydDsgdGhlbgogICAgICAgICAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IG9ub2MgbGlua3VwIGZhaWw7ICIKICAgICAgICAgICAgZmkgCiAgICAgICAgZG9uZSAgICAgICAKICAgIGRvbmUKCiAgICAjb2NzLXNjcmVlbgogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tc2xlZXAgMTBzIG9jc19zY3JlZW4gLS0tLSIKICAgIHNsZWVwIDEwCiAgICAoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvb2NzX3NjcmVlbi5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDIsJGJtY19ob3N0MiAtLXBvcnQgMiw0LDYsOCAtLXNraXAgZXJyb3IpCQogICAgc2xlZXAgNgogICAgI1NMRUVQIDYwUyBvY3Mtc2NyZWVuCiAgICAjIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDYwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICAjIHNsZWVwIDYwCiAgICAjIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIs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JDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS1ob3N0KQogICAgICAgICAgICBzaGlmdCAgICAgICAgICAgIAogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLWhvc3Qg5ZCO5b+F6aG75oyH5a6a5Li75py65YiX6KGo77yI5aaCIC0taG9zdCAxMDIsMTAz77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIElGUz0nLCcgcmVhZCAtcmEgaG9zdF9udW1iZXJzIDw8PCAiJDEiCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yICgoaT0wOyBpPCR7I2hvc3RfbnVtYmVyc1tAXX07IGkrKykpOyBkbwogICAgICAgICAgICAgICAgY2FzZSAkaSBpbgogICAgICAgICAgICAgICAgICAgIDApCiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QxPSIke2hvc3RfbnVtYmVyc1swXX0iCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgMSkKICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDI9IiR7aG9zdF9udW1iZXJzWzFdfSIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CgkJICAtLXBvcnQpCiAgICAgICAgICAgIHNoaWZ0ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tcG9ydCDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1wb3J0IDTvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGVzdF9wb3J0PSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKCQkgIC0tdG9wbykKICAgICAgICAgICAgc2hpZnQgICAgICAgICAgICAKICAgICAgICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1wb3J0IOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLXBvcnQgNO+8iSIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICBmaQogICAgICAgICAgICB0ZXN0X3RvcG89IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogIAkJCiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77ya5pyq55+l5Y+C5pWwICQxIgogICAgICAgICAgICBlY2hvICLnlKjms5U6ICQwIFstLW5vZGUgTk9ERV9JRF0gWy0taG9zdCBIT1NUMSxIT1NUMiwuLi5dIgogICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKZG9uZQoKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCmZpcnN0X25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgpzZWNvbmRfbm9kZT0iJCgodGFyZ2V0X3N0YXJfbm9kZSArIDQpKSIKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU1X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU2X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU3X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU4X2lwPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZThfYm1jPSQoanEgLXIgIi5cIiRzZWNvbmRfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpleHBvcnQgU05PREUxPSIkbm9kZTFfYm1jLCRub2RlMl9ibWMsJG5vZGUzX2JtYywkbm9kZTRfYm1jIgpleHBvcnQgU05PREUyPSIkbm9kZTVfYm1jLCRub2RlNl9ibWMsJG5vZGU3X2JtYywkbm9kZThfYm1jIgoKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDU9JChlY2hvICIkbm9kZTVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q2PSQoZWNobyAiJG5vZGU2X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nz0kKGVjaG8gIiRub2RlN19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDg9JChlY2hvICIkbm9kZThfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCmNvbGxlY3Rfb25ldF9jcm9zcygpIHsKICAgIGxvY2FsIGFjdGl2ZV9ibWM9JDEKCSAgbG9jYWwgY3Jvc3NfYm1jPSQyCiAgICBsb2NhbCBhY3RpdmVfcG9ydD0kMwoJICBsb2NhbCBvY3NfdG9wbz0kNAogICAgbG9jYWwgYWN0aXZlX2hvc3Q9Imh0dHBzOi8vJGFjdGl2ZV9ibWMiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWMiCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGVjaG8gIiRhY3RpdmVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKICAgIGxvY2FsIGNyb3NzX25vZGU9JChlY2hvICIkY3Jvc3NfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKICAgIGxvY2FsIGRpc190eF9saXN0PSgiJGNyb3NzX2JtYyIpCiAgICBJRlM9JywnIHJlYWQgLXJhIHNub2RlMSA8PDwgJFNOT0RFMQogICAgSUZTPScsJyByZWFkIC1yYSBzbm9kZTIgPDw8ICRTTk9ERTIKICAgIAogICAgI2Rpc2FibGUgY3Jvc3Mgb2NzIGFuZCBvdGhlciBzbm9kZSBvY3MgICAgCiAgICBmb3IgaW5kZXggaW4gIiR7IXNub2RlMVtAXX0iOyBkbyAgICAgICAgICAgICAgICAKICAgICAgICBpZiBbICIke3Nub2RlMVskaW5kZXhdfSIgPSAiJGFjdGl2ZV9ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBsb2NhbCBkaXNfdHhfbGlzdCs9KCR7c25vZGUyWyRpbmRleF19KSAKICAgICAgICBmaSAKICAgICAgICAKICAgICAgICBpZiBbICIke3Nub2RlMVskaW5kZXhdfSIgPSAiJGNyb3NzX2JtYyIgXTsgdGhlbiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGxvY2FsIGRpc190eF9saXN0Kz0oJHtzbm9kZTJbJGluZGV4XX0pIAogICAgICAgIGZpIAogICAgICAgIAogICAgZG9uZQogICAgCiAgICBmb3IgaW5kZXggaW4gIiR7IXNub2RlMltAXX0iOyBkbyAKICAgICAgICBpZiBbICIke3Nub2RlMlskaW5kZXhdfSIgPSAiJGFjdGl2ZV9ibWMiIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGxvY2FsIGRpc190eF9saXN0Kz0oJHtzbm9kZTFbJGluZGV4XX0pIAogICAgICAgICAgICAKICAgICAgICBmaSAKICAgICAgICAKICAgICAgICBpZiBbICIke3Nub2RlMlskaW5kZXhdfSIgPSAiJGNyb3NzX2JtYyIgXTsgdGhlbiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGxvY2FsIGRpc190eF9saXN0Kz0oJHtzbm9kZTFbJGluZGV4XX0pIAogICAgICAgIGZpIAogICAgZG9uZQogICAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0gYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCA9PT09PT09PT09PT09PT0iCgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCgkJCWVjaG8gJGNtZAogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lICYKICAgIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGRpc2FibGUgY3Jvc3NfcG9ydDogJGFjdGl2ZV9wb3J0ID09PT09PT09PT09PT09PSIKICAgIGZvciB0eF9ibWMgaW4gIiR7ZGlzX3R4X2xpc3RbQF19IjsgZG8gICAgICAKICAgICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCBodHRwczovLyR0eF9ibWMgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCiAgICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIGZpIAogICAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICAgIGRvbmUKICAgICAgZG9uZSAmICAgICAgCiAgICBkb25lCiAgICB3YWl0CiAgICAKICAgIAogICAgZWNobyAtZSAiXG5zbGVlcCAxMHMsIHdhaXRpbmcgb2NzIHN0YWJsZS4uLiIKICAgIHNsZWVwIDEwCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCAkYWN0aXZlX2JtYzogcCRhY3RpdmVfcG9ydCBjbWlzIGRhdGEgLS0tLS0iCiAgICBmb3IgKChqPTE7IGo8PTY7IGorKykpOyBkbwogICAgICBsb2NhbCBhY3RpdmVfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtYyAtZSAkYWN0aXZlX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpICAgIAogICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfY21pcyAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9jbWlzIgogICAgICAKICAgICAgaWYgISBlY2hvICIkYWN0aXZlX3BvcnRfY21pcyIgfCBncmVwIC1xICJFUlJPUiI7IHRoZW4KICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICBicmVhawogICAgICBmaSAKICAgICAgc2xlZXAgMwogICAgZG9uZSAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0ICRjcm9zc19ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaz0xOyBrPD02OyBrKyspKTsgZG8KICAgICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgICAgaWYgISBlY2hvICIkY3Jvc3NfcG9ydF9jbWlzIiB8IGdyZXAgLXFFICJFUlJPUiI7IHRoZW4gICAgICAKICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICBicmVhawogICAgICBmaSAKICAgICAgc2xlZXAgMwogICAgZG9uZSAKICAgICAgCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCBwJGFjdGl2ZV9wb3J0IFJTU0kgZGF0YSAtLS0tLSIKICAgIHNsZWVwIDIKICAgIGxvY2FsIGNyb3NzX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKSAKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpIAoKCiAgICAjIyMjIyMjZ2V0IHN3YSBhbmQgc3diIGRhdGEgIyMjIyMjIyMjIyMKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCAkYWN0aXZlX2JtYzogcCRhY3RpdmVfcG9ydCBzd2Evc3diIGRhdGEgLS0tLS0iCiAgICBmb3IgKChqPTE7IGo8PTY7IGorKykpOyBkbwogICAgICBsb2NhbCBhY3RpdmVfcG9ydF9zd2FiPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtYyAtZSAkYWN0aXZlX3BvcnQgLXMgYWxsIC1jIHJlZy1yZCAtcCBzd2Jfb25ldGJfaCxzd2Jfb25ldGFfaCxzd2Ffb25vY19oLHN3YV9vbmV0X2ggMj4mMSkgICAgCiAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9zd2FiICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X3N3YWIiCiAgICAgIAogICAgICBpZiAhIGVjaG8gIiRhY3RpdmVfcG9ydF9zd2FiIiB8IGdyZXAgLXEgIkVSUk9SIjsgdGhlbgogICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgIGJyZWFrCiAgICAgIGZpIAogICAgICBzbGVlcCAzCiAgICBkb25lIAogICAgCiAgICAgICAgICAgIAogICAgIyDosIPor5XovpPlh7rvvIjmjInpnIDlvIDlkK/vvIkKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X3Jzc2kgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X3Jzc2kiCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfcnNzaSAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9yc3NpIgogICAgICAgIAogICAgZWNobyAtZSAiXG4tLS0tIOiwg+eUqCBQeXRob24g5YiG5p6QICRhY3RpdmVfcG9ydCDmlbDmja4gLS0tLSIKICAgIGV4cG9ydCBMT09QPSIkb2NzX3RvcG8iCiAgICBleHBvcnQgQUNUSVZFX1BPUlQ9IiRhY3RpdmVfbm9kZS1QJGFjdGl2ZV9wb3J0IiAKICAgIGV4cG9ydCBDUk9TU19QT1JUPSIkY3Jvc3Nfbm9kZS1QJGFjdGl2ZV9wb3J0IgogICAgZXhwb3J0IEFDVElWRV9QT1JUX1JTU0k9IiRhY3RpdmVfcG9ydF9yc3NpIiBBQ1RJVkVfUE9SVF9DTUlTPSIkYWN0aXZlX3BvcnRfY21pcyIgQUNUSVZFX1BPUlRfU1dBQj0iJGFjdGl2ZV9wb3J0X3N3YWIiCiAgICBleHBvcnQgQ1JPU1NfUE9SVF9SU1NJPSIkY3Jvc3NfcG9ydF9yc3NpIiBDUk9TU19QT1JUX0NNSVM9IiRjcm9zc19wb3J0X2NtaXMiCgogICAgcHl0aG9uMyBjb2xsZWN0X3Rlc3RfZGF0YV9vbm9jX3Jzc2kucHkgCiAgICAKICAgIHVuc2V0IExPT1AgQUNUSVZFX0JNQyBBQ1RJVkVfUE9SVCBDUk9TU19CTUMgQ1JPU1NfUE9SVAogICAgdW5zZXQgQUNUSVZFX1BPUlRfUlNTSSBBQ1RJVkVfUE9SVF9DTUlTIENST1NTX1BPUlRfUlNTSSBDUk9TU19QT1JUX0NNSVMgQUNUSVZFX1BPUlRfU1dBQiAgCgogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZV9ibWMgYW5kICRjcm9zc19ibWM6IHAkYWN0aXZlX3BvcnQg5pWw5o2u5aSE55CG5a6M5oiQID09PT09PT09PT09PT09PVxuIgogICAgc2xlZXAgNgogICAgCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0gZW5hYmxlIGFjdGl2ZSBwb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAKICAgIGZvciB0eF9ibWMgaW4gIiR7ZGlzX3R4X2xpc3RbQF19IjsgZG8gICAgICAKICAgICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCBodHRwczovLyR0eF9ibWMgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIGZpIAogICAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICAgIGRvbmUKICAgICAgZG9uZSAmICAgICAgCiAgICBkb25lCiAgICB3YWl0Cn0KCmV4cG9ydCAtZiBjb2xsZWN0X29uZXRfY3Jvc3MKCmxpbmtfY3Jvc3N0YWxrICgpIHsKICBsb2NhbCBhY3RpdmVfYm1jPSQxCiAgbG9jYWwgY3Jvc3NfYm1jPSQyCQoJbG9jYWwgYWN0aXZlX3BvcnQ9JDMKICBsb2NhbCBhY3RpdmVfbm9kZT0kKGVjaG8gIiRhY3RpdmVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKICBsb2NhbCBjcm9zc19ub2RlPSQoZWNobyAiJGNyb3NzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoJIyMjIyMjIyMjIyNvbm9jIGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCgllY2hvICI9PT09PT09PT09PT09PXRlc3Qgbm9kZTokYWN0aXZlX25vZGUsJGNyb3NzX25vZGUgcG9ydDokYWN0aXZlX3BvcnQgb25vYyBjcm9zcyB0YWxrPT09PT09PT09PT0iCglpZiBbICIkYWN0aXZlX3BvcnQiIC1lcSA0IF07IHRoZW4KCQlsb2NhbCBvY3NfdG9wbz0ib25vYzYiCgllbGlmIFsgIiRhY3RpdmVfcG9ydCIgLWVxIDYgXTsgdGhlbgoJCWxvY2FsIG9jc190b3BvPSJvbm9jNyIKCWVsaWYgWyAiJGFjdGl2ZV9wb3J0IiAtZXEgOCBdOyB0aGVuCgkJbG9jYWwgb2NzX3RvcG89Im9ub2M2IgoJZmkKICBpZiBbICIkdGVzdF90b3BvIiA9PSAib25vYyIgLW8gIiR0ZXN0X3RvcG8iID09ICIiIF07IHRoZW4KICAgIAl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICAgCXRpbWVvdXQgMzBzIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgIAl0aW1lb3V0IDEyMHMgYmFzaCAtYyAnY29sbGVjdF9vbmV0X2Nyb3NzICIkQCInIF8gJGFjdGl2ZV9ibWMgJGNyb3NzX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCiAgICAJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRjcm9zc19ibWMgJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICBmaQoKCQogICAgIyMjIyMjIyMjIyNvbmV0IGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCiAgICBlY2hvICJ0ZXN0IG5vZGU6JGFjdGl2ZV9ub2RlLCRjcm9zc19ub2RlIHBvcnQ6JGFjdGl2ZV9wb3J0IG9uZXQgY3Jvc3MgdGFsayIJCiAgICBsb2NhbCBzbm9kZV9hPSQoKChhY3RpdmVfbm9kZSAtIGJtY19ob3N0MSkgLyA0KSkKICAgIGxvY2FsIHNub2RlX2M9JCgoKGNyb3NzX25vZGUgLSBibWNfaG9zdDEpIC8gNCkpIAoKICAgIGlmIFsgJHNub2RlX2EgLWVxICRzbm9kZV9jIF07IHRoZW4KCQllY2hvICJ0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YiIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGIiCQoJZWxzZQoJCWVjaG8gIm5vdCB0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YSIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGEiCQkKCWZpCglpZiBbICIkdGVzdF90b3BvIiA9PSAib25ldCIgLW8gIiR0ZXN0X3RvcG8iID09ICIiIF07IHRoZW4KICAgIAlpZiBbICIkYWN0aXZlX3BvcnQiIC1uZSA4IF07IHRoZW4KICAgIAkJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgIAkJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwogICAgCQl0aW1lb3V0IDEyMHMgYmFzaCAtYyAnY29sbGVjdF9vbmV0X2Nyb3NzICIkQCInIF8gJGFjdGl2ZV9ibWMgJGNyb3NzX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCiAgICAJCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkY3Jvc3NfYm1jICRhY3RpdmVfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KICAgIAlmaQogICBmaQkKfQpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDFfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpleHBvcnQgZGVidWdfbW9kZT0xCgoKaWYgWyAtbiAiJGhvc3QxIiBdICYmIFsgLW4gIiRob3N0MiIgXTsgdGhlbgoJaWYgW1sgIiRob3N0MSIgPT0gKi4qIF1dOyB0aGVuCiAgICBub2RlMV9ibWNpcD0iJGhvc3QxIgogICAgCiAgICBub2RlMl9ibWNpcD0iJGhvc3QyIgogIGVsc2UKICAgIG5vZGUxX2JtY2lwPSIke25vZGUxX2JtYyUuKn0uJGhvc3QxIgogICAgbm9kZTJfYm1jaXA9IiR7bm9kZTFfYm1jJS4qfS4kaG9zdDIiCiAgZmkKICAgIAoJbGlua19jcm9zc3RhbGsgJG5vZGUxX2JtY2lwICRub2RlMl9ibWNpcCAkdGVzdF9wb3J0ICAgIAplbHNlCiAgZWNobyAiLS0tLS0tIGNvbGxlY3QgYWxsIGNyb3NzIHRhbGsgZGF0YSA9PT0iCglsaW5rX2Nyb3NzdGFsayAkbm9kZThfYm1jICRub2RlNl9ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlOF9ibWMgJG5vZGU1X2JtYyA2CglsaW5rX2Nyb3NzdGFsayAkbm9kZTdfYm1jICRub2RlNV9ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlN19ibWMgJG5vZGU2X2JtYyA2CglsaW5rX2Nyb3NzdGFsayAkbm9kZTZfYm1jICRub2RlNF9ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlNl9ibWMgJG5vZGUzX2JtYyA2CglsaW5rX2Nyb3NzdGFsayAkbm9kZTVfYm1jICRub2RlM19ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlNV9ibWMgJG5vZGU0X2JtYyA2CQoJbGlua19jcm9zc3RhbGsgJG5vZGU0X2JtYyAkbm9kZTJfYm1jIDQKCSNsaW5rX2Nyb3NzdGFsayAkbm9kZTRfYm1jICRub2RlMV9ibWMgNgoJbGlua19jcm9zc3RhbGsgJG5vZGUzX2JtYyAkbm9kZTFfYm1jIDQJCgkjbGlua19jcm9zc3RhbGsgJG5vZGUzX2JtYyAkbm9kZTJfYm1jIDYJCglsaW5rX2Nyb3NzdGFsayAkbm9kZTJfYm1jICRub2RlOF9ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlMl9ibWMgJG5vZGU3X2JtYyA2CglsaW5rX2Nyb3NzdGFsayAkbm9kZTFfYm1jICRub2RlN19ibWMgNAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlMV9ibWMgJG5vZGU4X2JtYyA2CgkjbGlua19jcm9zc3RhbGsgJG5vZGU4X2JtYyAkbm9kZTdfYm1jIDgKCSNsaW5rX2Nyb3NzdGFsayAkbm9kZTZfYm1jICRub2RlNV9ibWMgOAoJI2xpbmtfY3Jvc3N0YWxrICRub2RlNF9ibWMgJG5vZGUzX2JtYyA4CgkjbGlua19jcm9zc3RhbGsgJG5vZGUyX2JtYyAkbm9kZTFfYm1jIDgKZmkKCnVuc2V0IGRlYnVnX21vZGUgY29sbGVjdF9vbmV0X2Nyb3NzIGV4cF90b29sIENTVl9GSUxFIFNOT0RFMSBTTk9ERTIKCmVjaG8gLWUgIlxu5omA5pyJ5b6q546v5omn6KGM5a6M5oiQLOaVsOaNruW3suS/neWtmOiHszokY3N2X2ZpbGUiCmNobW9kIC1SIDc1NSBjc3ZfZGF0YS8KIyDorrDlvZXnu5PmnZ/ml7bpl7QKZWNobyAtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobyAiLS0tLS0tIOa1i+ivlee7k+adn+S6jjogJChkYXRlKSAtLS0tLS0iCmVjaG8gIi0tLS0tLSDlrozmlbTnu5Pmnpzlt7Lkv53lrZjliLDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSAtLS0tLSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdG9feWQvLnZzY29kZS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADE1MTIwNzI2NjM3ADAxMjIzNwAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b195ZC8udnNjb2RlL2xhdW5jaC5qc29uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1MAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDA3NzIAMTUxMjA3MjY2MzcAMDE0NDE1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsKICAgIC8vIFVzZSBJbnRlbGxpU2Vuc2UgdG8gbGVhcm4gYWJvdXQgcG9zc2libGUgYXR0cmlidXRlcy4KICAgIC8vIEhvdmVyIHRvIHZpZXcgZGVzY3JpcHRpb25zIG9mIGV4aXN0aW5nIGF0dHJpYnV0ZXMuCiAgICAvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQ6IGh0dHBzOi8vZ28ubWljcm9zb2Z0LmNvbS9md2xpbmsvP2xpbmtpZD04MzAzODcKICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKICAgICJjb25maWd1cmF0aW9ucyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlB5dGhvbiBEZWJ1Z2dlcjogQ3VycmVudCBGaWxlIiwKICAgICAgICAgICAgInR5cGUiOiAiZGVidWdweSIsCiAgICAgICAgICAgICJyZXF1ZXN0IjogImxhdW5jaCIsCiAgICAgICAgICAgICJwcm9ncmFtIjogIiR7ZmlsZX0iLAogICAgICAgICAgICAiY29uc29sZSI6ICJpbnRlZ3JhdGVkVGVybWluYWwiLAogICAgICAgICAgICAianVzdE15Q29kZSI6IGZhbHNlCiAgICAgICAgfQogICAgXQp9AAAAAAAAdG9feWQvbm9kZV9jb25maWdzLmpzb24AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAzMjIyADE1MTIwNzI2NjM3ADAxNDIzMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7CiAgIjEiOiB7CiAgICAibm9kZTFfaXAiOiAiMTAuNTcuMjE2LjE2MiIsCiAgICAibm9kZTFfYm1jIjogIjEwLjU3LjIxNi45MSIsCiAgICAibm9kZTJfaXAiOiAiMTAuNTcuMjE2LjE3MCIsCiAgICAibm9kZTJfYm1jIjogIjEwLjU3LjIxNi45MiIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjE3NSIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi45MyIsCiAgICAibm9kZTRfaXAiOiAiMTAuNTcuMjE2LjE1NCIsCiAgICAibm9kZTRfYm1jIjogIjEwLjU3LjIxNi45NCIKICB9LAogICI1IjogewogICAgIm5vZGUxX2lwIjogIjEwLjU3LjIxNi4xNzQiLAogICAgIm5vZGUxX2JtYyI6ICIxMC41Ny4yMTYuOTUiLAogICAgIm5vZGUyX2lwIjogIjEwLjU3LjIxNi4xNjgiLAogICAgIm5vZGUyX2JtYyI6ICIxMC41Ny4yMTYuOTYiLAogICAgIm5vZGUzX2lwIjogIjEwLjU3LjIxNi4xNTAiLAogICAgIm5vZGUzX2JtYyI6ICIxMC41Ny4yMTYuOTciLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xODUiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuOTgiCiAgfSwKICAiOSI6IHsKICAgICJub2RlMV9pcCI6ICIxMC41Ny4yMTYuMTgwIiwKICAgICJub2RlMV9ibWMiOiAiMTAuNTcuMjE2Ljk5IiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTc2IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwMCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjE0NSIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDEiLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xMzQiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuMTAyIgogIH0sCiAgIjEzIjogewogICAgIm5vZGUxX2lwIjogIjEwLjU3LjIxNi4xNTciLAogICAgIm5vZGUxX2JtYyI6ICIxMC41Ny4yMTYuMTAzIiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTg4IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwNCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjE1NiIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDUiLAogICAgIm5vZGU0X2lwIjogIjEwLjU3LjIxNi4xNTEiLAogICAgIm5vZGU0X2JtYyI6ICIxMC41Ny4yMTYuMTA2IgogIH0sCiAgIjE3IjogewogICAgIm5vZGUxX2lwIjogIjEwLjU3LjIxNi4xNjciLAogICAgIm5vZGUxX2JtYyI6ICIxMC41Ny4yMTYuMTA3IiwKICAgICJub2RlMl9pcCI6ICIxMC41Ny4yMTYuMTc3IiwKICAgICJub2RlMl9ibWMiOiAiMTAuNTcuMjE2LjEwOCIsCiAgICAibm9kZTNfaXAiOiAiMTAuNTcuMjE2LjEzOSIsCiAgICAibm9kZTNfYm1jIjogIjEwLjU3LjIxNi4xMDkiLAogICAgIm5v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6L+e57ut56m65qC85Li65Y2V5Liq56m65qC877yM6KGl5YWo5Y+v6IO95pat6KOC55qE5a2X5q6177yI5aaCIFRFTVAg6KKr5ouG5YiG77yJCiAgICBjbWlzX21vbl9zdHIgPSByZS5zdWIocidccysnLCAnICcsIGNtaXNfbW9uX3N0cikuc3RyaXAoKQogICAgIyDpop3lpJblpITnkIbvvJrnoa7kv50gQ01JUyDlhbPplK7lrZflkI7ntKfot5/mlbDlrZfvvIjpgb/lhY3lrZfmrrXnspjov57vvIkKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NNSVMoXGQrKScsIHInQ01JUyBcMScsIGNtaXNfbW9uX3N0cikKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NIKFxkKyknLCByJ0NIIFwxJywgY21pc19tb25fc3RyKQoKICAgIHBhdHRlcm5zID0ge30KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5rip5bqm5qih5byP77ya5YW85a655a2X5q615L+u5aSN5ZCO55qE5qC85byPIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X3RlbXAiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgIHJmIkNNSVMge2NtaXNfbnVtfSBURU1QOiAoWystXT9cZCsoXC5cZCspPykgQyIsCiAgICAgICAgICAgIHJlLklHTk9SRUNBU0UKICAgICAgICApCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tIOmAmumBk+WPguaVsOaooeW8j++8muS/neaMgeeLrOeri+WMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICByZiJDTUlTIHtjbWlzX251bX0gQ0gge2NoX251bX06ICguKj8pKD89IENNSVMgfCQpIiwgICMg5rOo5oSPIENIIOWQjuWKoOepuuagvO+8iOS/ruWkjeWQjuagvOW8j++8iQogICAgICAgICAgICAgICAgcmUuRE9UQUxMIHwgcmUuSUdOT1JFQ0FTRQogICAgICAgICAgICApCiAgICAgICAgICAgIHBhdHRlcm5zW2YiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV90eCJdID0gcmUuY29tcGlsZShyIlRYIChbKy1dP1xkKyhcLlxkKyk/KSBkQm0iLCByZS5JR05PUkVDQVNFKQogICAgICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1faWJpYXMiXSA9IHJlLmNvbXBpbGUociJJQklBUyAoWystXT9cZCsoXC5cZCspPykgbUEiLCByZS5JR05PUkVDQVNFKQogICAgCiAgICByZXN1bHQgPSB7fQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLSDmj5Dlj5bmuKnluqbvvIjluKbosIPor5Xml6Xlv5fvvIkgLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIHRlbXBfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV90ZW1wIgogICAgICAgIHRlbXBfbWF0Y2ggPSBwYXR0ZXJuc1t0ZW1wX2tleV0uc2VhcmNoKGNtaXNfbW9uX3N0cikKICAgICAgICByZXN1bHRbdGVtcF9rZXldID0gdGVtcF9tYXRjaC5ncm91cCgxKSBpZiB0ZW1wX21hdGNoIGVsc2UgTm9uZQogICAgICAgIGlmIHJlc3VsdFt0ZW1wX2tleV06CiAgICAgICAgICAgIHByaW50KGYi5oiQ5Yqf5Yy56YWNIENNSVMge2NtaXNfbnVtfSBURU1QOiB7cmVzdWx0W3RlbXBfa2V5XX0gQyIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RhcnRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bX0iKQogICAgICAgICAgICBlbmRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bSsxfSIpIGlmIGNtaXNfbnVtIDwgOCBlbHNlIGxlbihjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIHRhcmdldF9ibG9jayA9IGNtaXNfbW9uX3N0cltzdGFydF9pZHg6ZW5kX2lkeF0uc3RyaXAoKQogICAgICAgICAgICBwcmludChmIuitpuWRiu+8muacquWMuemFjeWIsCBDTUlTIHtjbWlzX251bX0gVEVNUO+8jOW9k+WJjeWMuuWdl+WGheWuue+8mnt0YXJnZXRfYmxvY2t9IikKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5o+Q5Y+W6YCa6YGT5Y+C5pWwIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIHJ4X2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9SWCIKICAgICAgICAgICAgaWJpYXNfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xhc2VyX2liaWFzIgoKICAgICAgICAgICAgbGluZV9wYXR0ZXJuID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXQogICAgICAgICAgICBsaW5lX21hdGNoID0gbGluZV9wYXR0ZXJuLnNlYXJjaChjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lX21hdGNoOgogICAgICAgICAgICAgICAgcmVzdWx0W3R4X2tleV0gPSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IE5vbmUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGxpbmVfY29udGVudCA9IGxpbmVfbWF0Y2guZ3JvdXAoMSkKICAgICAgICAgICAgICAgIHR4X21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X3R4Il0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIGliaWFzX21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2liaWFzIl0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIHJlc3VsdFt0eF9rZXldID0gdHhfbWF0Y2guZ3JvdXAoMSkgaWYgdHhfbWF0Y2ggZWxzZSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IGliaWFzX21hdGNoLmdyb3VwKDEpIGlmIGliaWFzX21hdGNoIGVsc2UgTm9uZQogICAgICAgICAgICByZXN1bHRbcnhfa2V5XSA9IE5vbmUKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIHBhcnNlX3Jzc2lfZGF0YShyc3NpX3N0cik6CiAgICAiIiIKICAgIOino+aekCBSU1NJIOaWh+acrOaVsOaNru+8jOeUn+aIkCBDTUlTIDF+OCDlkIQgQ0gxfjgg55qEIFJYIOaYoOWwhOWtl+WFuAogICAg5Y+C5pWw77yacnNzaV9zdHIgLSDljIXlkKsgb2NzMX5vY3M4IOaVsOaNrueahOaWh+acrOWtl+espuS4sgogICAg6L+U5Zue77yacnNzaV9kaWN0IC0ge2NtaXNfbnVtOiBbQ0gxX1JYLCBDSDJfUlgsIC4uLiwgQ0g4X1JYXSwgLi4ufe+8iGNtaXNfbnVtIDF+OO+8iQogICAgIiIiCiAgICByc3NpX2RpY3QgPSB7Y21pc19udW06IFtOb25lIGZvciBfIGluIHJhbmdlKDgpXSBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSl9CiAgICByc3NpX2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiByc3NpX3N0ci5zcGxpdCgiXG4iKSBpZiBsaW5lLnN0cmlwKCldCiAgICAKICAgIGZvciBsaW5lIGluIHJzc2lfbGluZXM6CiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tIOWFs+mUruS/ruWkje+8muWMuemFjeaWueaLrOWPt+WMheijueeahOaVsOWAvCArIOS8mOWMluWMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAxLiBcWzog5Yy56YWNIFJTU0lfREJNIOWQjueahOW3puaLrOWPtwoKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgKICAgICAgICAgICAgciIuKj9vY3MoXGQrKVwuW146XSs6Lio/UlNTSV9EQk06XHMqXFtccyooWystXT9cZCtcLlxkKyg/OlxzKixccypbKy1dP1xkK1wuXGQrKSopXHMqXF0iLAogICAgICAgICAgICBsaW5lCiAgICAgICAgKQogICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgIyDlv73nlaUgTmFtZXNwYWNlIOihjO+8iOato+W4uOeOsOixoe+8ie+8jOWFtuS7luacquWMuemFjeihjOaJjeaJk+WNsAogICAgICAgICAgICBpZiAiTmFtZXNwYWNlIiBub3QgaW4gbGluZToKICAgICAgICAgICAgICAgIHByaW50KGYi5pyq5Yy56YWN55qEUlNTSeihjO+8mntsaW5lfSIpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgY21pc19udW0gPSBpbnQobWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgaWYgY21pc19udW0gPCAxIG9yIGNtaXNfbnVtID4gODoKICAgICAgICAgICAgY29udGludWUKICAgICAgICAKICAgICAgICAjIOaMieOAjOmAl+WPtyvnqbrmoLzjgI3liIblibLmlbDlgLzvvIjlhbzlrrnnuq/pgJflj7cv5aSa56m65qC877yJCiAgICAgICAgcnNzaV9kYm1fbGlzdCA9IHJlLnNwbGl0KHIiXHMqLFxzKiIsIG1hdGNoLmdyb3VwKDIpKQogICAgICAgICMg56Gu5L+d5Y+q5Y+W5YmNOOS4qumAmumBk++8iOmYsuatouaVsOaNruW8guW4uO+8iQogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UobWluKDgsIGxlbihyc3NpX2RibV9saXN0KSkpOgogICAgICAgICAgICByc3NpX2RpY3RbY21pc19udW1dW2NoX2lkeF0gPSByc3NpX2RibV9saXN0W2NoX2lkeF0KICAgIAogICAgcmV0dXJuIHJzc2lfZGljdAoKZGVmIG1haW4oKToKCiAgICAjIDEuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWfuuehgOWPguaVsO+8iOWOn+mAu+i+keS/neeVme+8iQogICAgY3N2X2ZpbGUgPSBvcy5nZXRlbnYoIkNTVl9GSUxFIiwgIiIpICAgIAogICAgbG9vcCA9IG9zLmdldGVudigiTE9PUCIsICIiKSAgICAKICAgIGFjdGl2ZV9wb3J0ID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVCIsICIiKSAgIAogICAgY3Jvc3NfcG9ydCA9IG9zLmdldGVudigiQ1JPU1NfUE9SVCIsICIiKQogICAgCiAgICAjIDIuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWQhOerr+WPo+eahCBDTUlTIOebkeaOp+aVsOaNru+8iOWOn+mAu+i+keS/neeVme+8iQogICAgYWN0aXZlX3BvcnRfY21pcyA9IG9zLmdldGVudigiQUNUSVZFX1BPUlRfQ01JUyIsICIiKQogICAgY3Jvc3NfcG9ydF9jbWlzID0gb3MuZ2V0ZW52KCJDUk9TU19QT1JUX0NNSVMiLCAiIikKCiAgICAKICAgICMgMy4g5LuO546v5aKD5Y+Y6YeP6K+75Y+W5ZCE56uv5Y+j55qEIFJTU0kg5pWw5o2u77yI55So5LqO5o+Q5Y+WIFJY77yJCiAgICBhY3RpdmVfcG9ydF9yc3NpID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVF9SU1NJIiwgIiIpICAKICAgIGNyb3NzX3BvcnRfcnNzaSA9IG9zLmdldGVudigiQ1JPU1NfUE9SVF9SU1NJIiwgIiIpCiAgIAoKICAgICMgNC4g5o+Q5Y+W5ZCE56uv5Y+j5Z+656GA5Y+C5pWw77yIVFgvSUJJQVMv5rip5bqm77yJCiAgICBwcmludChmImJyMV9wNCDnmoQgY21pcyDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9jbWlzfSIpCiAgICBhY3RpdmVfcG9ydF9wYXJhbXMgPSBleHRyYWN0X2NtaXNfcGFyYW1zKGFjdGl2ZV9wb3J0X2NtaXMpCiAgICBwcmludChmImJyMV9wNCDnmoQgY21pcyDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9wYXJhbXN9IikKICAgIGNyb3NzX3BvcnRfcGFyYW1zID0gZXh0cmFjdF9jbWlzX3BhcmFtcyhjcm9zc19wb3J0X2NtaXMpCgoKICAgICMgNS4g6Kej5p6Q5ZCE56uv5Y+jIFJTU0kg5pWw5o2u77yM6KaG55uWIFJYIOWAvAogICAgIyA1LjEg5aSE55CGIGFjdGl2ZV9wb3J0CiAgICBwcmludChmImJyMV9wNCDnmoQgUlNTSSDop6PmnpDnu5PmnpzvvJpcbnthY3RpdmVfcG9ydF9yc3NpfSIpCiAgICBhY3RpdmVfcG9ydF9yc3NpX2RpY3QgPSBwYXJzZV9yc3NpX2RhdGEoYWN0aXZlX3BvcnRfcnNzaSkKICAgIHByaW50KGYiYnIxX3A0IOeahCBSU1NJIOino+aekOe7k+aenO+8mlxue2FjdGl2ZV9wb3J0X3Jzc2lfZGljdH0iKQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UoOCk6CiAgICAgICAgICAgIGNoX251bSA9IGNoX2lkeCArIDEKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICBhY3RpdmVfcG9ydF9wYXJhbXNbcnhfa2V5XSA9IGFjdGl2ZV9wb3J0X3Jzc2lfZGljdFtjbWlzX251bV1bY2hfaWR4XQogICAgCiAgICAjIDUuMiDlpITnkIYgY3Jvc3NfcG9ydAogICAgcHJpbnQoZiJjcm9zc19wb3J0IOeahCBSU1NJIOino+aekOe7k+aenO+8mlxue2Nyb3NzX3BvcnRfcnNzaX0iKQogICAgY3Jvc3NfcG9ydF9yc3NpX2RpY3QgPSBwYXJzZV9yc3NpX2RhdGEoY3Jvc3NfcG9ydF9yc3NpKQogICAgcHJpbnQoZiJicjFfcDYg55qEIFJTU0kg6Kej5p6Q57uT5p6c77yaXG57Y3Jvc3NfcG9ydF9yc3NpX2RpY3R9IikKICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfaWR4IGluIHJhbmdlKDgpOgogICAgICAgICAgICBjaF9udW0gPSBjaF9pZHggKyAxCiAgICAgICAgICAgIHJ4X2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9SWCIKICAgICAgICAgICAgY3Jvc3NfcG9ydF9wYXJhbXNbcnhfa2V5XSA9IGNyb3NzX3BvcnRfcnNzaV9kaWN0W2NtaXNfbnVtXVtjaF9pZHhdCiAgICAKICAgIAogICAgIyA2LiDnu4Too4XmlbDmja7ooYzvvIjljp/pgLvovpHkv53nlZnvvIkKICAgIHJvd3MgPSBbXQogICAgcG9ydHMgPSBbCiAgICAgICAgKGFjdGl2ZV9wb3J0LCBhY3RpdmVfcG9ydF9wYXJhbXMpLAogICAgICAgICMoY3Jvc3NfcG9ydCwgY3Jvc3NfcG9ydF9wYXJhbXMpCiAgICBdCiAgICBuZXdfaGVhZGVyID0gWyJBQ1RJVkVfUE9SVCIsICJPQ1NfVE9QTyIsICJDUk9TU19QT1JUIiwgIk9DUyIsICJsYW5lIiwgImNyb3NzX3RlbXAiLCAiY3Jvc3NfUlgiLCAiY3Jvc3NfVFgiLCAiY3Jvc3NfaWJpYXMiLCAiYXZ0aXZlX3RlbXAiLCAiYXZ0aXZlX1JYIiwgImF2dGl2ZV9UWCIsICJhdnRpdmVfaWJpYXMiXQoKCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgY3Jvc3NfdGVtcF92YWwgPSBjcm9zc19wb3J0X3BhcmFtcy5nZXQoZiJjbWlze2NtaXNfbnVtfV90ZW1wIikKICAgICAgICBhY3RpdmVfdGVtcF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KGYiY21pc3tjbWlzX251bX1fdGVtcCIpCiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIGliaWFzX2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9sYXNlcl9pYmlhcyIKICAgICAgICAgICAgCiAgICAgICAgICAgIGNyb3NzX3J4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGNyb3NzX3R4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldCh0eF9rZXkpCiAgICAgICAgICAgIGNyb3NzX2liaWFzX3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChpYmlhc19rZXkpCiAgICAgICAgICAgIAogICAgICAgICAgICBhY3RpdmVfcnhfdmFsID0gYWN0aXZlX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGFjdGl2ZV90eF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KHR4X2tleSkKICAgICAgICAgICAgYWN0aXZlX2liaWFzX3ZhbCA9IGFjdGl2ZV9wb3J0X3BhcmFtcy5nZXQoaWJpYXNfa2V5KQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIGNyb3NzX3J4X3ZhbCBvciBjcm9zc190eF92YWwgb3IgY3Jvc3NfaWJpYXNfdmFsOgogICAgICAgICAgICAgICAgcm93ID0geyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAiQUNUSVZFX1BPUlQiOiBhY3RpdmVfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgIk9DU19UT1BPIjogbG9vcCwgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAiQ1JPU1NfUE9SVCI6IGNyb3NzX3BvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICJPQ1MiOiBjbWlzX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgImxhbmUiOiBjaF9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICJjcm9zc190ZW1wIjogY3Jvc3NfdGVtcF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJjcm9zc19SWCI6IGNyb3NzX3J4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImNyb3NzX1RYIjogY3Jvc3NfdHhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3NfaWJpYXMiOiBjcm9zc19pYmlhc192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJhdnRpdmVfdGVtcCI6IGFjdGl2ZV90ZW1wX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImF2dGl2ZV9SWCI6IGFjdGl2ZV9yeF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJhdnRpdmVfVFgiOiBhY3RpdmVfdHhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiYXZ0aXZlX2liaWFzIjogYWN0aXZlX2liaWFzX3ZhbAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKHJvdykKCiAgICAjIDcuIOWGmeWFpSBDU1bvvIjljp/pgLvovpHkv53nlZnvvIkKICAgIGlmIHJvd3M6CiAgICAgICAgZGYgPSBwZC5EYXRhRnJhbWUocm93cywgY29sdW1ucz1uZXdfaGVhZGVyKQogICAgICAgIHdyaXRlX2hlYWRlciA9IG5vdCBvcy5wYXRoLmV4aXN0cyhjc3ZfZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKGNzdl9maWxlKSA9PSAwCiAgICAgICAgZGYudG9fY3N2KAogICAgICAgICAgICBjc3ZfZmlsZSwKICAgICAgICAgICAgbW9kZT0iYSIsCiAgICAgICAgICAgIGhlYWRlcj13cml0ZV9oZWFkZXIsCiAgICAgICAgICAgIGluZGV4PUZhbHNlLAogICAgICAgICAgICBlbmNvZGluZz0idXRmLTgiCiAgICAgICAgKQogICAgICAgIHByaW50KGYi5pWw5o2u5bey5YaZ5YWlIHtjc3ZfZmlsZX3vvIhhY3RpdmVfcG9ydDp7YWN0aXZlX3BvcnR977yJIikKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoZiLmnKrmj5Dlj5bliLDku7vkvZUgQ01JUyDpgJrpgZPmlbDmja7vvIhhY3RpdmVfcG9ydDp7YWN0aXZlX3BvcnR9LO+8iSIpCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0b195ZC82NF94ei1kYXJrX2N1cnJlbnRfZmlsdGVyLnNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1MAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMTc0NDcAMTUxMjA3MjY2MzcAMDE2MjUyACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL2Jpbi9iYXNoCgojIGNvbmZpZ3VyZQpyb290X3VzZXI9InJvb3QiCnJvb3RfcHNzd2Q9IlJDbXNAWnRlMyIKcmVtb3RlX3VzZXI9InBpY3QiCnJlbW90ZV9wc3N3ZD0iUGljVDEhMkAzIzQkIgpleHBfdG9vbD0iLi9zbWJ1cy10b29sL2J1aWxkL3doaXRlcml2ZXJfZXhwLmV4ZSIKd2FpdF90aW1lPTEwCmxvb3BfdGltZXM9MQoKcmVzZXRfZ3B1X2ZsYWc9ZmFsc2UKc2V0X3RvcG9fZmxhZz1mYWxzZQpydW5fYWxsPXRydWUgCgpjb25maWdfZmlsZT0ibm9kZV9jb25maWdzLmpzb24iICAKdGFyZ2V0X3N0YXJfbm9kZT0iIgpub2RlMV9pcD0iIgpub2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKIyDku45KU09O6K+75Y+W6YWN572u77yIanHop6PmnpDvvIkKbm9kZTFfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUxX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlM19pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2JtYyIgIiRjb25maWdfZmlsZSIpCnN0YXJfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCgpibWNfaG9zdDE9JChlY2hvICIkbm9kZTFfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QyPSQoZWNobyAiJG5vZGUyX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mz0kKGVjaG8gIiRub2RlM19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDQ9JChlY2hvICIkbm9kZTRfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCgpjb2xsZWN0X29ub2NfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSIkMSIKICAgIGxvY2FsIGFjdGl2ZV9ibWNpcD0iJHshYWN0aXZlX2JtY30iICAKICAgIGxvY2FsIF9hY3RpdmVfbm9kZT0iJHthY3RpdmVfYm1jJV9ibWN9IgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDIKICAgIGxvY2FsIGNyb3NzX2JtYz0kMwogICAgbG9jYWwgY3Jvc3NfYm1jaXA9IiR7IWNyb3NzX2JtY30iICAKICAgIGxvY2FsIF9jcm9zc19ub2RlPSIke2Nyb3NzX2JtYyVfYm1jfSIKICAgIGxvY2FsIGNyb3NzX3BvcnQ9JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jaXAiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWNpcCIKCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2FjdGl2ZV9ub2RlICRzdGFyX25vZGUpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoY29udmVydF9ub2RlICRfY3Jvc3Nfbm9kZSAkc3Rhcl9ub2RlKQogIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgICNsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHggLS1vY3MgJG9jcyIKICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRhY3RpdmVfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAgCiAgICAjZGlzYWJsZSBvY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTM7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IC0tY21kIHdiLW9jcyAtLXJlZyAweDEwMDA4MiAtLXZhbHVlIDB4ZmYgLS1vY3MgJG9jcyIKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZQogICAgCiAgICBlY2hvIC1lICJcbndhaXQgMTBzLCBvY3Mgc3RhYmxlLi4uIgogICAgc2xlZXAgMTAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgZGF0YSAtLS0tLSIKICAgIGxvY2FsIGFjdGl2ZV9wb3J0X2NtaXM9JChvY3NkaWFnIC1pICRhY3RpdmVfYm1jaXAgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jaXAgLWUgJGNyb3NzX3BvcnQgLWMgdmNtZCAtcCAiY21pcyBtb24iIDI+JjEpCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiYWN0aXZlX3BvcnRfY21pcyAkYWN0aXZlX2hvc3Q6ICRhY3RpdmVfcG9ydF9jbWlzIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgIHNsZWVwIDIKICAgIGxvY2FsIGNyb3NzX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGNyb3NzX2hvc3QgLS1wb3J0ICRjcm9zc19wb3J0IDI+JjEpCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKQogICAgICAgICAgICAKICAgICMg6LCD6K+V6L6T5Ye677yI5oyJ6ZyA5byA5ZCv77yJCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9yc3NpICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9yc3NpIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X3Jzc2kgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfcnNzaSIKICAgICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLSDosIPnlKggUHl0aG9uIOWIhuaekCAkYWN0aXZlX3BvcnQg5pWw5o2uIC0tLS0iICAgIAogICAgZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCiAgICBleHBvcnQgTE9PUD0iJGkiCiAgICBleHBvcnQgQUNUSVZFX1BPUlQ9IiRhY3RpdmVfbm9kZS1QJGFjdGl2ZV9wb3J0IiAKICAgIGV4cG9ydCBDUk9TU19QT1JUPSIkY3Jvc3Nfbm9kZS1QJGNyb3NzX3BvcnQiCiAgICBleHBvcnQgQUNUSVZFX1BPUlRfUlNTST0iJGFjdGl2ZV9wb3J0X3Jzc2kiIEFDVElWRV9QT1JUX0NNSVM9IiRhY3RpdmVfcG9ydF9jbWlzIiAKICAgIGV4cG9ydCBDUk9TU19QT1JUX1JTU0k9IiRjcm9zc19wb3J0X3Jzc2kiIENST1NTX1BPUlRfQ01JUz0iJGNyb3NzX3BvcnRfY21pcyIKCiAgICBweXRob24zIGNvbGxlY3RfdGVzdF9kYXRhX29ub2NfcnNzaS5weSAKICAgIAogICAgdW5zZXQgQ1NWX0ZJTEUgTE9PUCBBQ1RJVkVfQk1DIEFDVElWRV9QT1JUIENST1NTX0JNQyBDUk9TU19QT1JUCiAgICB1bnNldCBBQ1RJVkVfUE9SVF9SU1NJIEFDVElWRV9QT1JUX0NNSVMgQ1JPU1NfUE9SVF9SU1NJIENST1NTX1BPUlRfQ01JUyAgICAKCiAgICBlY2hvIC1lICJcbj09PT09PT09PT09PT0kYWN0aXZlX2JtYyBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IOaVsOaNruWkhOeQhuWujOaIkCA9PT09PT09PT09PT09PT1cbiIKICAgIHNsZWVwIDIgIAp9CkxPR19GSUxFPSJsb2dzL3N1bW1hcnlfbG9ncy82Ml9zdHJlc3NfMTMtMTYtb25vY19jaGVja19vY3Nwb3dlcl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKY3N2X2ZpbGU9ImNzdl9kYXRhLzYyX3N0cmVzc18xMy0xNi1vbm9jX2NoZWNrX29jc3Bvd2VyXyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgoKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZGVidWdfbW9kZT0xCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8KICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09IOesrCAkaSDova7lvqrnjq8gPT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgoKICAgICNwb3J0IDgKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgOCBub2RlMl9ibWMgOCAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUyX2JtYyA4IG5vZGUxX2JtYyA4CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTNfYm1jIDggbm9kZTRfYm1jIDgKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA4IG5vZGUzX2JtYyA4CiAgICAjcG9ydDQKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgNCBub2RlM19ibWMgNCAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGUzX2JtYyA0IG5vZGUxX2JtYyA0CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDQgbm9kZTRfYm1jIDQKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA0IG5vZGUyX2JtYyA0CiAgICAjcG9ydDYKICAgIGNvbGxlY3Rfb25vY19jcm9zcyBub2RlMV9ibWMgNiBub2RlNF9ibWMgNiAgICAKICAgICMgY29sbGVjdF9vbm9jX2Nyb3NzIG5vZGU0X2JtYyA2IG5vZGUxX2JtYyA2CiAgICBjb2xsZWN0X29ub2NfY3Jvc3Mgbm9kZTJfYm1jIDYgbm9k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ICAgICAgaWYgW1sgLXogIiQxIiB8fCAiJDEiID1+IF4tLSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZWNobyAi6ZSZ6K+v77yaLS1ub2RlIOWQjuW/hemhu+aMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGFyZ2V0X3N0YXJfbm9kZT0iJDEiCiAgICAgICAgICAgIHNoaWZ0CiAgICAgICAgICAgIDs7CiAgICAgICAgLS1ob3N0KQogICAgICAgICAgICBzaGlmdCAgICAgICAgICAgIAogICAgICAgICAgICBpZiBbWyAteiAiJDEiIHx8ICIkMSIgPX4gXi0tIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvICLplJnor6/vvJotLWhvc3Qg5ZCO5b+F6aG75oyH5a6a5Li75py65YiX6KGo77yI5aaCIC0taG9zdCAxMDIsMTAz77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIElGUz0nLCcgcmVhZCAtcmEgaG9zdF9udW1iZXJzIDw8PCAiJDEiIAogICAgIAogICAgICAgICAgICBmb3IgKChpPTA7IGk8JHsjaG9zdF9udW1iZXJzW0BdfTsgaSsrKSk7IGRvCiAgICAgICAgICAgICAgICBjYXNlICRpIGluCiAgICAgICAgICAgICAgICAgICAgMCkKICAgICAgICAgICAgICAgICAgICAgICAgaG9zdDE9IiR7aG9zdF9udW1iZXJzWzBdfSIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAxKQogICAgICAgICAgICAgICAgICAgICAgICBob3N0Mj0iJHtob3N0X251bWJlcnNbMV19IgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGRvbmUgICAgICAgICAgICAKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKCQktLXBvcnQpCiAgICAgICAgICAgIHNoaWZ0ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tcG9ydCDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1wb3J0IDTvvIkiCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgZmkKICAgICAgICAgICAgdGVzdF9wb3J0PSIkMSIKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICLplJnor6/vvJrmnKrnn6Xlj4LmlbAgJDEiCiAgICAgICAgICAgIGVjaG8gIueUqOazlTogJDAgWy0tbm9kZSBOT0RFX0lEXSBbLS1ob3N0IEhPU1QxLEhPU1QyLC4uLl0iCiAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKZmlyc3Rfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCnNlY29uZF9ub2RlPSIkKCh0YXJnZXRfc3Rhcl9ub2RlICsgNCkpIgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlN19ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZThfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDU9JChlY2hvICIkbm9kZTVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q2PSQoZWNobyAiJG5vZGU2X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nz0kKGVjaG8gIiRub2RlN19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDg9JChlY2hvICIkbm9kZThfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCmNvbGxlY3Rfb25ldF9jcm9zcygpIHsKICAgIGxvY2FsIGFjdGl2ZV9ibWM9JDEKCWxvY2FsIGNyb3NzX2JtYz0kMgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDMKCWxvY2FsIG9jc190b3BvPSQ0CiAgICBsb2NhbCBhY3RpdmVfaG9zdD0iaHR0cHM6Ly8kYWN0aXZlX2JtYyIKICAgIGxvY2FsIGNyb3NzX2hvc3Q9Imh0dHBzOi8vJGNyb3NzX2JtYyIKICAgIGxvY2FsIGFjdGl2ZV9ub2RlPSQoZWNobyAiJGFjdGl2ZV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQogICAgbG9jYWwgY3Jvc3Nfbm9kZT0kKGVjaG8gIiRjcm9zc19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0ID09PT09PT09PT09PT09PSIKICAgICNhY3RpdmF0ZV9vY3MgICAgCiAgICBmb3Igb2NzIGluIHsxLi44fTsgZG8KICAgICAgICBmb3IgKChtPTE7IG08PTY7IG0rKykpOyBkbwogICAgICAgICAgICBsb2NhbCBjbWQ9IiRleHBfdG9vbCAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMCAtLW9jcyAkb2NzIgoJCQllY2hvICRjbWQKICAgICAgICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gIuaJp+ihjOWRveS7pO+8miRjbWQiCiAgICAgICAgICAgIGxvY2FsIG91dHB1dD0kKCRjbWQgMj4mMSkKICAgICAgICAgICAgZWNobyAkb3V0cHV0CiAgICAgICAgICAgIGlmICEgZWNobyAiJG91dHB1dCIgfCBncmVwIC1xICJMb2NrZWQiOyB0aGVuCiAgICAgICAgICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpIAogICAgICAgICAgICBzbGVlcCAzCiAgICAgICAgZG9uZQogICAgZG9uZSAgCgogICAgI2Rpc2FibGUgb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD02OyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgLS1jbWQgd2Itb2NzIC0tcmVnIDB4MTAwMDgyIC0tdmFsdWUgMHhmZiAtLW9jcyAkb2NzIgogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lCiAgICAKICAgIGVjaG8gLWUgIlxuc2xlZXAgMTBzLCB3YWl0aW5nIG9jcyBzdGFibGUuLi4iCiAgICBzbGVlcCAxMAogICAgCiAgICBlY2hvIC1lICJcbi0tLS0tIGNvbGxlY3QgJGFjdGl2ZV9ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaj0xOyBqPD02OyBqKyspKTsgZG8KICAgICAgbG9jYWwgYWN0aXZlX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGFjdGl2ZV9ibWMgLWUgJGFjdGl2ZV9wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKSAgICAKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgICAgCiAgICAgIGlmICEgZWNobyAiJGFjdGl2ZV9wb3J0X2NtaXMiIHwgZ3JlcCAtcSAiQXN5bmNQb2xsIGZhaWxlZHxsb2NrOiBGYWlsZWQiOyB0aGVuCiAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgYnJlYWsKICAgICAgZmkgCiAgICAgIHNsZWVwIDMKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0ICRjcm9zc19ibWM6IHAkYWN0aXZlX3BvcnQgY21pcyBkYXRhIC0tLS0tIgogICAgZm9yICgoaz0xOyBrPD02OyBrKyspKTsgZG8KICAgICAgbG9jYWwgY3Jvc3NfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkY3Jvc3NfYm1jIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfY21pcyAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfY21pcyIKICAgICAgaWYgISBlY2hvICIkY3Jvc3NfcG9ydF9jbWlzIiB8IGdyZXAgLXFFICJBc3luY1BvbGwgZmFpbGVkfGxvY2s6IEZhaWxlZCI7IHRoZW4gICAgICAKICAgICAgICBzdWNjZXNzPXRydWUKICAgICAgICBicmVhawogICAgICBmaSAKICAgICAgc2xlZXAgMwogICAgZG9uZSAgICAKICAgIAogICAgZWNobyAtZSAiXG4tLS0tLSBjb2xsZWN0IHAkYWN0aXZlX3BvcnQgUlNTSSBkYXRhIC0tLS0tIgogICAgc2xlZXAgMgogICAgbG9jYWwgY3Jvc3NfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkY3Jvc3NfaG9zdCAtLXBvcnQgJGFjdGl2ZV9wb3J0IDI+JjEpCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9yc3NpPSQoY2Qgc21idXMtdG9vbCAmJiBweXRob24zIHNjcmlwdHMvcmVhZF9yc3NpLnB5IC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAyPiYxKQogICAgICAgICAgICAKICAgICMg6LCD6K+V6L6T5Ye677yI5oyJ6ZyA5byA5ZCv77yJCiAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAiY3Jvc3NfcG9ydF9yc3NpICRjcm9zc19ob3N0OiAkY3Jvc3NfcG9ydF9yc3NpIgogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X3Jzc2kgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfcnNzaSIKICAgICAgICAKICAgIGVjaG8gLWUgIlxuLS0tLSDosIPnlKggUHl0aG9uIOWIhuaekCAkYWN0aXZlX3BvcnQg5pWw5o2uIC0tLS0iCiAgICBleHBvcnQgTE9PUD0iJG9jc190b3BvIgogICAgZXhwb3J0IEFDVElWRV9QT1JUPSIkYWN0aXZlX25vZGUtUCRhY3RpdmVfcG9ydCIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVD0iJGNyb3NzX25vZGUtUCRhY3RpdmVfcG9ydCIKICAgIGV4cG9ydCBBQ1RJVkVfUE9SVF9SU1NJPSIkYWN0aXZlX3BvcnRfcnNzaSIgQUNUSVZFX1BPUlRfQ01JUz0iJGFjdGl2ZV9wb3J0X2NtaXMiIAogICAgZXhwb3J0IENST1NTX1BPUlRfUlNTST0iJGNyb3NzX3BvcnRfcnNzaSIgQ1JPU1NfUE9SVF9DTUlTPSIkY3Jvc3NfcG9ydF9jbWlzIgoKICAgIHB5dGhvbjMgY29sbGVjdF90ZXN0X2RhdGFfb25vY19yc3NpLnB5IAogICAgCiAgICB1bnNldCBMT09QIEFDVElWRV9CTUMgQUNUSVZFX1BPUlQgQ1JPU1NfQk1DIENST1NTX1BPUlQKICAgIHVuc2V0IEFDVElWRV9QT1JUX1JTU0kgQUNUSVZFX1BPUlRfQ01JUyBDUk9TU19QT1JUX1JTU0kgQ1JPU1NfUE9SVF9DTUlTICAgIAoKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSRhY3RpdmVfYm1jIGFuZCAkY3Jvc3NfYm1jOiBwJGFjdGl2ZV9wb3J0IOaVsOaNruWkhOeQhuWujOaIkCA9PT09PT09PT09PT09PT1cbiIKICAgIHNsZWVwIDYKICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PSBkaXNhYmxlIGFjdGl2ZSBwb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9NjsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCgkJCWVjaG8gJGNtZAogICAgICAgICAgICBbICRkZWJ1Z19tb2RlIC1lcSAxIF0gJiYgZWNobyAi5omn6KGM5ZG95Luk77yaJGNtZCIKICAgICAgICAgICAgbG9jYWwgb3V0cHV0PSQoJGNtZCAyPiYxKQogICAgICAgICAgICBlY2hvICRvdXRwdXQKICAgICAgICAgICAgaWYgISBlY2hvICIkb3V0cHV0IiB8IGdyZXAgLXEgIkxvY2tlZCI7IHRoZW4KICAgICAgICAgICAgICAgIHN1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgZmkgCiAgICAgICAgICAgIHNsZWVwIDMKICAgICAgICBkb25lCiAgICBkb25lIAp9CgpleHBvcnQgLWYgY29sbGVjdF9vbmV0X2Nyb3NzCgpsaW5rX2Nyb3NzdGFsayAoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSQxCiAgICBsb2NhbCBjcm9zc19ibWM9JDIJCglsb2NhbCBhY3RpdmVfcG9ydD0kMwogICAgbG9jYWwgYWN0aXZlX25vZGU9JChlY2hvICIkYWN0aXZlX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoZWNobyAiJGNyb3NzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoJIyMjIyMjIyMjIyNvbm9jIGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCgllY2hvICI9PT09PT09PT09PT09PXRlc3Qgbm9kZTokYWN0aXZlX25vZGUsJGNyb3NzX25vZGUgcG9ydDokYWN0aXZlX3BvcnQgb25vYyBjcm9zcyB0YWxrPT09PT09PT09PT0iCglpZiBbICIkYWN0aXZlX3BvcnQiIC1lcSA0IF07IHRoZW4KCQlsb2NhbCBvY3NfdG9wbz0ib25vYzYiCgllbGlmIFsgIiRhY3RpdmVfcG9ydCIgLWVxIDYgXTsgdGhlbgoJCWxvY2FsIG9jc190b3BvPSJvbm9jNyIKCWVsaWYgWyAiJGFjdGl2ZV9wb3J0IiAtZXEgOCBdOyB0aGVuCgkJbG9jYWwgb2NzX3RvcG89Im9ub2M2IgoJZmkKCgl0aW1lb3V0IDMwcyBiYXNoIHNldF9wb3J0X3RvcG8uc2ggJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRhY3RpdmVfYm1jICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJdGltZW91dCAxMjBzIGJhc2ggLWMgJ2NvbGxlY3Rfb25ldF9jcm9zcyAiJEAiJyBfICRjcm9zc19ibWMgJGFjdGl2ZV9ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoKCQoJIyMjIyMjIyMjIyNvbmV0IGNyb3NzIHRhbGsjIyMjIyMjIyMjIyMjCgllY2hvICJ0ZXN0IG5vZGU6JGFjdGl2ZV9ub2RlLCRjcm9zc19ub2RlIHBvcnQ6JGFjdGl2ZV9wb3J0IG9uZXQgY3Jvc3MgdGFsayIJCglsb2NhbCBzbm9kZTE9JCgoKGFjdGl2ZV9ub2RlIC0gYm1jX2hvc3QxKSAvIDQpKQogICAgbG9jYWwgc25vZGUyPSQoKChjcm9zc19ub2RlIC0gYm1jX2hvc3QxKSAvIDQpKSAKCgkgaWYgWyAkc25vZGUxIC1lcSAkc25vZGUyIF07IHRoZW4KCQllY2hvICJ0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YiIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGIiCQoJZWxzZQoJCWVjaG8gIm5vdCB0aGUgc2FtZSBzbm9kZSBzZXQgdG9wby1vbmV0YSIKCQlsb2NhbCBvY3NfdG9wbz0ib25ldGEiCQkKCWZpCgkKCWlmIFsgIiRhY3RpdmVfcG9ydCIgLW5lIDggXTsgdGhlbgoJCXRpbWVvdXQgMzBzIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCgkJdGltZW91dCAzMHMgYmFzaCBzZXRfcG9ydF90b3BvLnNoICRjcm9zc19ibWMgJGFjdGl2ZV9wb3J0ICRvY3NfdG9wbwoJCXRpbWVvdXQgMTIwcyBiYXNoIC1jICdjb2xsZWN0X29uZXRfY3Jvc3MgIiRAIicgXyAkYWN0aXZlX2JtYyAkY3Jvc3NfYm1jICRhY3RpdmVfcG9ydCAkb2NzX3RvcG8KCQl0aW1lb3V0IDEyMHMgYmFzaCAtYyAnY29sbGVjdF9vbmV0X2Nyb3NzICIkQCInIF8gJGNyb3NzX2JtYyAkYWN0aXZlX2JtYyAkYWN0aXZlX3BvcnQgJG9jc190b3BvCglmaQkKfQpMT0dfRklMRT0ibG9ncy9zdW1tYXJ5X2xvZ3MvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDFfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotY3Jvc3N0YWxrX29jc19yc3NpXyRibWNfaG9zdDEtJGJtY19ob3N0OF8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmNzdiIKZXhwb3J0IENTVl9GSUxFPSIkY3N2X2ZpbGUiCgojIOWQjOaXtui+k+WHuuWIsOe7iOerr+WSjOaXpeW/l+aWh+S7tgpleGVjID4gPih0ZWUgLWEgIiRMT0dfRklMRSIpIDI+JjEKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpleHBvcnQgZGVidWdfbW9kZT0xCgpub2Rlcz0oIiRub2RlMV9ibWMiICIkbm9kZTJfYm1jIiAiJG5vZGUzX2JtYyIgIiRub2RlNF9ibWMiICIkbm9kZTVfYm1jIiAiJG5vZGU2X2JtYyIgIiRub2RlN19ibWMiICIkbm9kZThfYm1jIiApCmZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvCiAgZm9yIHBvcnQgaW4gMiA0IDYgODsgZG8KICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09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dmVyeV9DRS5zaCAtLSDlubbooYxzZXR1cCAxMzE0MTUxNiBFUDMyIFRPUE8gTElOSy0gcG9ydDQ2IOS4uk9ORVRB77yMcG9ydDI45Li6T05PQzoiMDQwMzAyMDEwODA3MDYwNSIsIOWPr+mAmui/h2xvb3BfdGltZXM9MSDmlLlsb29w5qyh5pWwCjMuIDUyX3p0ZS0xMzE0MTUxNi1yZXNldF80Ry1HUFUuc2ggIC0tIOW5tuihjDEzMTQxNTE2IFJFU0VUIDRHIEdQVQo0LiA1Ml96dGUtNTY3OC1zZXR1cF80Ry1saW5rdXBfcmVjb3ZlcnlfQ0Uuc2ggLS0g5bm26KGMc2V0dXAgNTY3OCBFUDMyIFRPUE8gTElOSy0gcG9ydDQ2IOS4uk9ORVRB77yMcG9ydDLkuLpPTk9DNe+8jHBvcnQ45Li6T05PQzYsIOWPr+mAmui/h2xvb3BfdGltZXM9MSDmlLlsb29w5qyh5pWwCjUuIDUyX3p0ZS0xMjM0LXNldHVwXzRHLWxpbmt1cF9yZWNvdmVyeV9DRS5zaCAtLSDlubbooYxzZXR1cCAxMjM0IEVQMzIgVE9QTyBMSU5LLSBwb3J0NDYg5Li6T05FVEHvvIxwb3J0MuS4uk9OT0M177yMcG9ydDjkuLpPTk9DNiwg5Y+v6YCa6L+HbG9vcF90aW1lcz0xIOaUuWxvb3DmrKHmlbAKCjYuIDUwX3NldF9wb3J0X3RvcG8uc2ggYm1jX2lwIHBvcnQgdG9wbyAtLemFjee9rnBvcnQgdG9wbyDohJrmnKzlj6/phY3nva7lj4LmlbDmiafooYwKNy4gNTBfenRlX29uZXRhLWxpbmtfcmVjb3ZlcnlfQ0Uuc2ggc3ZyMV9pcCBzdnIxX2JtY19pcCBzdnIyX2lwIHN2cjJfYm1jX2lwIHBvcnQgLS0gc2V0dXAgT05FVEEgbGlua3VwIOiEmuacrO+8jCDkuI3ljIXlkKsg6YWN572udG9wb+WSjHJlc2V0IEdQVeatpemqpAo4LiA1MF96dGVfb25vYy1saW5rX3JlY292ZXJ5X0NFLnNoIHN2cl9pcCBzdnJfYm1jX2lwIHBvcnQgLS0gc2V0dXAgT05PQyBsaW5rdXAg6ISa5pys77yMIOS4jeWMheWQqyDphY3nva50b3Bv5ZKMcmVzZXQgR1BV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ICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgICAgIC0tdGVzdCkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgcnVuX2FsbD1mYWxzZQogICAgICAgICAgICAjIOWkhOeQhi0tdGVzdOWQjuWkmuS4quWPguaVsAogICAgICAgICAgICB3aGlsZSBbWyAkIyAtZ3QgMCAmJiAhICIkMSIgPX4gXi0tIF1dOyBkbwogICAgICAgICAgICAgICAgY2FzZSAiJDEiIGluCiAgICAgICAgICAgICAgICAgICAgcmVzZXRfZ3B1KQogICAgICAgICAgICAgICAgICAgICAgICByZXNldF9ncHVfZmxhZz10cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgc2V0X3RvcG8pCiAgICAgICAgICAgICAgICAgICAgICAgIHNldF90b3BvX2ZsYWc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8muS4jeaUr+aMgeeahOa1i+ivleWPguaVsCAnJDEn77yM5LuF5pSv5oyBIHJlc2V0X2dwdSDmiJYgc2V0X3RvcG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgZG9uZQogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGVjaG8gIumUmeivr++8muacquefpeWPguaVsCAnJDEn77yM5pSv5oyB55qE5Y+C5pWw77yaLS1ub2RlIDznvJblj7c+IC0tdGVzdCBbcmVzZXRfZ3B1fHNldF90b3BvLi4uXSIKICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIDs7CiAgICBlc2FjCmRvbmUKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI+WKoOi9vUpTT07phY3nva4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyDmoKHpqozkvp3otZblkozphY3nva7mlofku7YKaWYgISBjb21tYW5kIC12IGpxICY+IC9kZXYvbnVsbDsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya5pyq5a6J6KOFIGpxIOW3peWFt++8jOivt+WFiOaJp+ihjCAneXVtIGluc3RhbGwganEgLXknIOaIliAnYXB0IGluc3RhbGwganEgLXknIOWuieijhSIKICAgIGV4aXQgMQpmaQppZiBbWyAteiAiJHRhcmdldF9zdGFyX25vZGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrlv4XpobvpgJrov4cgLS1ub2RlIOaMh+WumuiKgueCuee8luWPt++8iOWmgiAtLW5vZGUgMjHvvIkiCiAgICBleGl0IDEKZmkKaWYgW1sgISAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgZWNobyAi6ZSZ6K+v77ya6YWN572u5paH5Lu2ICRjb25maWdfZmlsZSDkuI3lrZjlnKjvvIzor7fmo4Dmn6Xot6/lvoQiCiAgICBleGl0IDEKZmkKCiMg5LuOSlNPTuivu+WPlumFjee9ru+8iGpx6Kej5p6Q77yJCm5vZGUxX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlMV9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMV9ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlMl9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTNfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUzX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGU0X2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlNF9ibWMiICIkY29uZmlnX2ZpbGUiKQpzdGFyX25vZGU9IiR0YXJnZXRfc3Rhcl9ub2RlIgoKYm1jX2hvc3QxPSQoZWNobyAiJG5vZGUxX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Mj0kKGVjaG8gIiRub2RlMl9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDM9JChlY2hvICIkbm9kZTNfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q0PSQoZWNobyAiJG5vZGU0X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCgoKIyDmoKHpqozphY3nva7lrozmlbTmgKcKaWYgW1sgIiRub2RlMV9pcCIgPT0gIm51bGwiIHx8IC16ICIkbm9kZTFfaXAiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7bkuK3mnKrmib7liLAgc3Rhcl9ub2RlPSR0YXJnZXRfc3Rhcl9ub2RlIOeahOacieaViOmFjee9riIKICAgIGV4aXQgMQpmaQoKTE9HX0ZJTEU9ImxvZ3Mvc3VtbWFyeV9sb2dzL3N0cmVzcy00LTYtOF9saW5rc19vbmV0Yl9yZWNvdmVyeV9DTUlTLW1vbl8kKGRhdGUgKyVZJW0lZF8lSCVNJVMpLmxvZyIKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEdQVSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZ3B1KCkgeyAgCiAgICBhY3RpdmVfcmVtb3RlMT0kMQogICAgZ3B1X2NvdW50PTgKICAgIGVjaG8gLWUgIlxuLS0tLS0tOlJFU0VUICRhY3RpdmVfcmVtb3RlMSBHUFUgLS0tLS0tIiA+JjIKICAgIGZvciAoKGk9MTsgaTw9MzsgaSsrKSk7IGRvCiAgICAgICAgcmVzdF9ncHU9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJGFjdGl2ZV9yZW1vdGUxICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJicnNtaSByZXNldCAtZ1wiIicgMj4mMSkKICAgICAgICBlY2hvICJyZXNldCAkYWN0aXZlX3JlbW90ZTEgR1BVOiIgPiYyCiAgICAgICAgZWNobyAiJHJlc3RfZ3B1IiA+JjIgICAgCiAgICAgICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRyZXN0X2dwdSIgfCBncmVwIC1jICJHUFVbMC03XSBTdWNjZXNzZWQuIikKICAgICAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICAgICAgZWNobyAtZSAidGltZXMkaTogR1BVIFJFU0VUIHN1Y2Nlc3MiID4mMgogICAgICAgICAgICBicmVhayAgICAgICAgCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvIC1lICJ0aW1lcyRpOiBHUFUgUkVTRVQgZmFpbCIgPiYyICAgICAgICAgICAgCiAgICAgICAgZmkKICAgICAgICBzbGVlcCAyMAogICAgZG9uZQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZGlzYWJsZV9hbGxfbHRzc20jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpc2FibGVfYWxsX2x0c3NtKCkgeyAgIAogICAgbm9kZV9pcD0kMSAgICAKICAgIGdwdV9jb3VudD04CiAgICBlY2hvICJzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInIgogICAgZGlzX2dwdXBvcnQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vbHRzc20gLWRcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFUgcG9ydOaYr+WQpumHjee9ruaIkOWKnwogICAgc3VjY2Vzc19jb3VudD0kKGVjaG8gIiRkaXNfbG9jYWxncHUiIHwgZ3JlcCAtY0UgJ15HUFUgWzAtN10sIEhXXFtbMC05XStcXTogZGlzYWJsZSBsdHNzbSBcKDIsIDQsIDYsIDgsIDEwXCkgZG9uZSQnKSAgCiAgICBpZiBbICRzdWNjZXNzX2NvdW50IC1lcSAkZ3B1X2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJHUFUgUkVTRVQgc3VjY2VzcyIKICAgICAgICByZXR1cm4gMAogICAgZWxzZQogICAgICAgIGVjaG8gLWUgIkdQVSBSRVNFVCBGQUlMIgogICAgICAgIHJldHVybiAyCiAgICBmaSAgICAKICAgIHNsZWVwIDEKfQoKZGlzYWJsZV9wb3J0X2x0c3NtKCkgewogICAgbm9kZV9pcD0kMQogICAgbm9kZV9wb3J0PSQyCiAgICBncHVfY291bnQ9OAogICAgZWNobyAic3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCIuL3NjcmlwdHMvZGlzYWJsZV9wb3J0X2x0c3NtICckbm9kZV9wb3J0J1wiIiciCiAgICBkaXNfZ3B1cG9ydD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9zY3JpcHRzL2Rpc2FibGVfcG9ydF9sdHNzbSAnJG5vZGVfcG9ydCdcIiInKSAgIAogICAKICAgIGVjaG8gIm5vZGUtJG5vZGVfaXAgcG9ydCRub2RlX3BvcnQgZGlzYWJsZSBzdGF0dXM6IgogICAgZWNobyAiJGRpc19ncHVwb3J0IgogICAgIyDmo4Dmn6Vsb2NhbCDmiYDmnIlHUFXmmK/lkKbph43nva7miJDlip8gICAgCiAgICBzdWNjZXNzX2NvdW50PSQoZWNobyAiJGRpc19ncHVwb3J0IiB8IGdyZXAgLWMgJ0hXXFtbMC03XVxdOiBkaXNhYmxlIGx0c3NtICckbm9kZV9wb3J0JyBkb25lJCcpICAKICAgIGlmIFsgJHN1Y2Nlc3NfY291bnQgLWVxICRncHVfY291bnQgXTsgdGhlbgogICAgICAgIGVjaG8gLWUgImRpc2FibGUgcG9ydCBsdHNzbSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAtZSAiZGlzYWJsZSBwb3J0IGx0c3NtIEZBSUwiCiAgICAgICAgcmV0dXJuIDIKICAgIGZpICAgIAogICAgc2xlZXAgMQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNSRVNFVEVYUCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcmVzZXRfZXhwKCkgeyAgIAogICAgbG9jYWwgaG9zdD0iJDEiCiAgICBsb2NhbCBwb3J0PSIkMiIgIAogICAgZWNobyAkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCByZXNldCAtLXBhcmFtICJjbG9kIHByaSIgMj4mMQogICAgJGV4cF90b29sIC0taG9zdCAkaG9zdCAtLXBvcnQgJHBvcnQgLS1jbWQgcmVzZXQgLS1wYXJhbSAiY2xvZCBwcmkiIDI+JjEKICAgIHNsZWVwIDMKICAgIGVjaG8gImNoZWsgRVhQIHN0YXQuLi4iCiAgICBleHBfc3RhdGU9JCgkZXhwX3Rvb2wgLS1ob3N0ICRob3N0IC0tcG9ydCAkcG9ydCAtLWNtZCBzdGF0IDI+JjEpCQogICAgZWNobyAiZXhwIHN0YXRlOiIKICAgIGVjaG8gIiRleHBfc3RhdGUiIAogICAgdGltX3N3X3RpbWU9JChlY2hvICIkZXhwX3N0YXRlIiB8IGdyZXAgIlRJTV9TVzoiIHwgc2VkIC1uICdzLy4qVElNX1NXOiBcKFteLF0qXCkuKi9cMS9wJykKICAgIHNlY19wYXJ0PSQoZWNobyAiJHRpbV9zd190aW1lIiB8IGF3ayAtRic6JyAne3ByaW50ICRORn0nKQogICAgc2Vjb25kc19zdHI9JChlY2hvICIkc2VjX3BhcnQiIHwgdHIgLWQgJ1xuJyB8IGdyZXAgLW9FICdbMC05XSsnIHwgaGVhZCAtbjEpCiAgICBpZiBbWyAiJHNlY29uZHNfc3RyIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIHNlY29uZHM9JCgoMTAjJHNlY29uZHNfc3RyKSkKICAgIGVsc2UKICAgICAgICBlY2hvICLnp5LmlbDmoLzlvI/ml6DmlYjvvIjmj5Dlj5blgLw6IFskc2Vjb25kc19zdHJdLCDop4bkuLpGQUlMIiAgICAgICAgCiAgICAgICAgY29udGludWUKICAgIGZpCiAgICAjIOWIpOaWree7k+aenAogICAgaWYgWyAiJHNlY29uZHMiIC1sdCA1IF07IHRoZW4gICAgICAgIAogICAgICAgIGVjaG8gLWUgIkVYUCByZXNldCBzdWNjZXNzIgogICAgICAgIHJldHVybiAwCiAgICBlbHNlCiAgICAgICAgZWNobyAiVElNX1NXOiAkc2Vjb25kcyBzLCBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb249IkdQVSBFWFAgcmVzZXQgRkFJTCIgCiAgICAgICAgcmV0dXJuIDIKICAgIGZpCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2xvYWQgZ3B1IHRvcG8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRfZ3B1dG9wbygpIHsKICAgIG5vZGVfaXA9JDEgCiAgICBncHVfdG9wbz0kMgogICAgZWNobyAtZSAiXG4tLS0tbG9hZC1ncHUtdG9wbyAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIi4vb2NzVG9wbyAtcyBtZXNoXzZwXzMyLmpzb25cIiInCiAgICAgICAKICAgIG91dHB1dD0kKHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZV9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwiLi9vY3NUb3BvIC1zIG1lc2hfNnBfMzIuanNvblwiIicgMj4mMSkKICAgIHNsZWVwIDEKICAgIGVjaG8gImxvYWQgdG9wbyByZXN1bHQ6IgogICAgZWNobyAiJG91dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgIyBod2lkX2NvdW50PTgKICAgICMgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGUyX3BvcnRcXTogUmVhZHkiKSAgICAKICAgICMgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICMgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIHN1Y2Nlc3MiCiAgICAjICAgICByZXR1cm4gMCAKICAgICMgZWxzZQogICAgIyAgICAgZWNobyAiUkVUUkFJTiBMSU5LIDEgcmVhZHkgRkFJTCIKICAgICMgICAgIHJldHVybiAwIAogICAgIyBmaSAKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjTElOS1VQIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpvbmV0X2xpbmt1cCgpIHsKICAgIGxvY2FsIG5vZGUxX2lwPSQxCiAgICBsb2NhbCBub2RlMV9wb3J0PSQyCiAgICBsb2NhbCBub2RlMl9pcD0kMwogICAgbG9jYWwgbm9kZTJfcG9ydD0kNCAgIAoKICAgIGVjaG8gLWUgIlxuLS0tLU9ORVQtIExJTktVUCAtLS0tIiAgIAoJI2xpbmsgMSB0cmFuaW5nICAgIAogICAgZWNobyBzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGUxX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZTFfcG9ydCdcIiInCiAgICBlY2hvIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTJfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMl9wb3J0J1wiIicKICAgICAKICAgIHNzaHBhc3MgLXAgJ1BpY1QxITJAMyM0JCcgc3NoICRyZW1vdGVfdXNlckAkbm9kZTFfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlMV9wb3J0J1wiIicgJgogICAgbGluazFfb3V0cHV0PSQoc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlMl9pcCAnZWNobyBSQ21zQFp0ZTMgfCBzdSAtIHJvb3QgYmFzaCAtYyAiZG9ja2VyIGV4ZWMgbXlzY2NsLXpkcyBiYXNoIC1jIFwib2NzVG9wbyAtcCAnJG5vZGUyX3BvcnQnXCIiJwogICAgICAyPiYxKQogICAgc2xlZXAgMgogICAgZWNobyAibGluazEgdHJhaW46IgogICAgZWNobyAiJGxpbmsxX291dHB1dCIgCiAgICAjIyBjaGVjayBhbGwgSFdJRCBwb3J0IHJlYWR5IG9yIG5vdAogICAgaHdpZF9jb3VudD04CiAgICBsaW5rMV9jb3VudD0kKGVjaG8gIiRsaW5rMV9vdXRwdXQiIHwgZ3JlcCAtYyAiSFdJRCBbMC03XSBQb3J0XFskbm9kZTJfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCm9ub2NfbGlua3VwKCkgewogICAgbG9jYWwgbm9kZV9pcD0kMQogICAgbG9jYWwgbm9kZV9wb3J0PSQyCgogICAgZWNobyAtZSAiXG4tLS0tT05PQy1MSU5LVVAgLS0tLSIgICAKCSNsaW5rIDEgdHJhbmluZyAgICAKICAgIGVjaG8gc3NocGFzcyAtcCAnUGljVDEhMkAzIzQkJyBzc2ggJHJlbW90ZV91c2VyQCRub2RlX2lwICdlY2hvIFJDbXNAWnRlMyB8IHN1IC0gcm9vdCBiYXNoIC1jICJkb2NrZXIgZXhlYyBteXNjY2wtemRzIGJhc2ggLWMgXCJvY3NUb3BvIC1wICckbm9kZV9wb3J0J1wiIicKICAgICAgICAgICAgCiAgICBsaW5rMV9vdXRwdXQ9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLXAgJyRub2RlX3BvcnQnXCIiJyAgMj4mMSkKICAgIHNsZWVwIDIKICAgIGVjaG8gImxpbmsxIHRyYWluOiIKICAgIGVjaG8gIiRsaW5rMV9vdXRwdXQiIAogICAgIyMgY2hlY2sgYWxsIEhXSUQgcG9ydCByZWFkeSBvciBub3QKICAgIGh3aWRfY291bnQ9OAogICAgbGluazFfY291bnQ9JChlY2hvICIkbGluazFfb3V0cHV0IiB8IGdyZXAgLWMgIkhXSUQgWzAtN10gUG9ydFxbJG5vZGVfcG9ydFxdOiBSZWFkeSIpICAgIAogICAgaWYgWyAkbGluazFfY291bnQgLWVxICRod2lkX2NvdW50IF07IHRoZW4KICAgICAgICBlY2hvIC1lICJSRVRSQUlOIExJTksgMSBzdWNjZXNzIgogICAgICAgIHJldHVybiAwIAogICAgZWxzZQogICAgICAgIGVjaG8gIlJFVFJBSU4gTElOSyAxIHJlYWR5IEZBSUwiCiAgICAgICAgcmV0dXJuIDAgCiAgICBmaSAKCiAgICBzbGVlcCAxCn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0dQVVNQRUVEIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpncHVfc3BlZWQoKSB7CiAgICBob3N0PSQxCiAgICBwb3J0PSQyCgogICAgIy0tLS0tLS0tLS0tIGNoZWNrIGFsbCBHUFUgcG9ydCBpcyBHRU41WDggb3Igbm90LS0tLS0tLS0tLS0tLQogICAgZWNobyAtZSAiXG4tLS0tT05FVEEtIGNoZWNrIGFsbCBHUFUgcG9ydCAkcG9ydCBpcyBHRU41WDggb3Igbm90IC0tLS0iIAogICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8gICAgICAgCiAgICAgICAgR0VONV9wYXR0ZXJuPSJQb3J0ICRwb3J0OiBHRU46IDUsIFdpZHRoOiA4IgogICAgICAgIGV4cGVjdGVkX2NvdW50PTggICAgICAgIAogICAgICAgIGxpbmsxX2Z1bGw9JChzc2hwYXNzIC1wICdQaWNUMSEyQDMjNCQnIHNzaCAkcmVtb3RlX3VzZXJAJG5vZGVfaXAgJ2VjaG8gUkNtc0BadGUzIHwgc3UgLSByb290IGJhc2ggLWMgImRvY2tlciBleGVjIG15c2NjbC16ZHMgYmFzaCAtYyBcIm9jc1RvcG8gLWNcIiInKQogICAgICAgIGxpbmsxX0dFTj0kKGVjaG8gIiRsaW5rMV9mdWxsIiB8IGdyZXAgICJQb3J0ICRwb3J0IiAyPiYxKSAKICAgICAgICBlY2hvIC1lICJsaW5rMTpcbiAkbGluazFfR0VOIgogICAgICAgIGxpbmsxX2NvdW50PSQoZWNobyAiJGxpbmsxX0dFTiIgfCBncmVwIC1jICIkR0VONV9wYXR0ZXJuIiAyPiYxKQogICAgICAgIGVjaG8gImxpbmsxIGdlbjUgY291bnQ6ICRsaW5rMV9jb3VudCIJCiAgICAgICAgaWYgWyAkbGluazFfY291bnQgLWVxICRleHBlY3RlZF9jb3VudCBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gLWUgIlJFVFJBSU4gTElOSyAxIEdFTjVYOCBzdWNjZXNzIgogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9dHJ1ZQogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAtZSAiUkVUUkFJTiBMSU5LIDEgR0VONVg4IEZBSUwiIAogICAgICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICAgICAgZmFpbF9yZWFzb249IlJFVFJBSU4gTElOSyAxIEdFTjVYOCBGQUlMIiAKICAgICAgICBmaQogICAgICAgIHNsZWVwIDYKICAgIGRvbmUKfQoKIyDorrDlvZXlvIDlp4vml7bpl7QKZWNobyAiPT09IOa1i+ivleW8gOWni+S6jjogJChkYXRlKSA9PT0iCmVjaG8gIj09PSDml6Xlv5fmlofku7Y6ICRMT0dfRklMRSA9PT0iCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvCgpmb3IgKChpPTE7IGk8PSRsb29wX3RpbWVzOyBpKyspKTsgZG8gIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IOWOi+a1i2xpbmt1cCDmtYvor5XnrKwkaSDova4gPT09PT09PT09PT09PT09IgogICAgZWNobyAgICAKICAgIGN1cnJlbnRfc3VjY2Vzcz10cnVlCiAgICBmYWlsX3JlYXNvbj0iIgogICAgICAgIAogICAgIyMjIyMjIyMjIyNzZXQgNEcgVE9QTyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICBpZiBbICIkc2V0X3RvcG9fZmxhZyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJcbj09PT09PSBzZXQgNEcgdG9vcCA9PT09PT0iCiAgICAgICAgZWNobwogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDggb25vYzYgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDIgb25vYzUgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDQgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDYgb25ldGEgJgogICAgICAgIGJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDggb25vYzYgJgogICAgICAgIHdhaXQKICAgICAgICBlY2hvICAgICAgICAKICAgIGZpCgogICAgI1JFU0VUIDRHIEdQVQogICAgZWNobyAtZSAiXG49PT09PT0gcmVzZXQgNEcgR1BVID09PT09PSIgICAgCiAgICBlY2hvCiAgICBlY2hvIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMV9pcAogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGUxX2lwICYKICAgIGJhc2ggcmVzZXRfYnJfZ3B1LnNoICRub2RlMl9pcCAmCiAgICBiYXNoIHJlc2V0X2JyX2dwdS5zaCAkbm9kZTNfaXAgJgogICAgYmFzaCByZXNldF9icl9ncHUuc2ggJG5vZGU0X2lwICYKICAgIHdhaXQKICAgIHNsZWVwIDMKICAgIGVjaG8KCiAgICAjUkVTRVRFWFAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXJlc2V0IGV4cCAtLS0tIiAKICAgIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9leHBfY29sZF9yZXNldC5weSAtLWhvc3QgJGJtY19ob3N0MSwkYm1jX2hvc3QyLCRibWNfaG9zdDMsJGJtY19ob3N0NCAtLXBvcnQgMiw0LDYsOCkKICAgIHNsZWVwIDEKICAgIAogICAgI09DUy1TQ1JFRU4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLW9jc19zY3JlZW4gYmVmb3JlIGxpbmt1cC0tLS0iIAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKCiAgICAjb25ldCBsaW5rdXAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUxX2lwICI0IiAkbm9kZTNfaXAgIjQiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgIAogICAgc2xlZXAgMiAgCiAgICBpZiAhIG9uZXRfbGlua3VwICRub2RlMl9pcCAiNCIgJG5vZGU0X2lwICI0IjsgdGhlbgogICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgIGZhaWxfcmVhc29uKz0iIHBvcnQtJHBvcnQgbGlua3VwIGZhaWw7ICIKICAgIGZpICAgCiAgICBzbGVlcCAyIAogICAgaWYgISBvbmV0X2xpbmt1cCAkbm9kZTFfaXAgIjYiICRub2RlNF9pcCAiNiI7IHRoZW4KICAgICAgICBjdXJyZW50X3N1Y2Nlc3M9ZmFsc2UKICAgICAgICBmYWlsX3JlYXNvbis9IiBwb3J0LSRwb3J0IGxpbmt1cCBmYWlsOyAiCiAgICBmaSAgCiAgICBzbGVlcCAyICAKICAgIGlmICEgb25ldF9saW5rdXAgJG5vZGUyX2lwICI2IiAkbm9kZTNfaXAgIjYiOyB0aGVuCiAgICAgICAgY3VycmVudF9zdWNjZXNzPWZhbHNlCiAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBsaW5rdXAgZmFpbDsgIgogICAgZmkgICAKICAgIHNsZWVwIDIgCgogICAgI29ub2MgbGlua3VwCiAgICBub2Rlcz0oIiRub2RlMV9pcCIgIiRub2RlMl9pcCIgIiRub2RlM19pcCIgIiRub2RlNF9pcCIpIAogICAgcG9ydHM9KDIgOCkgICAKICAgIGZvciBub2RlIGluICIke25vZGVzW0BdfSI7IGRvIAogICAgICAgIGZvciBwb3J0IGluICIke3BvcnRzW0BdfSI7IGRvICAgICAgCiAgICAgICAgICAgIGlmICEgb25vY19saW5rdXAgJG5vZGUgJHBvcnQ7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfc3VjY2Vzcz1mYWxzZQogICAgICAgICAgICAgICAgZmFpbF9yZWFzb24rPSIgcG9ydC0kcG9ydCBvbm9jIGxpbmt1cCBmYWlsOyAiCiAgICAgICAgICAgICAgICBzbGVlcCAyCiAgICAgICAgICAgIGZpIAogICAgICAgIGRvbmUgICAgICAgCiAgICBkb25lCgogICAgI29jcy1zY3JlZW4KICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDEwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICBzbGVlcCAxMAogICAgKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL29jc19zY3JlZW4ucHkgLS1ob3N0ICRibWNfaG9zdDEsJGJtY19ob3N0MiwkYm1jX2hvc3QzLCRibWNfaG9zdDQgLS1wb3J0IDIsNCw2LDggLS1za2lwIGVycm9yKQkKICAgIHNsZWVwIDYKICAgICMgI1NMRUVQIDYwUyBvY3Mtc2NyZWVuCiAgICAjIGVjaG8gLWUgIlxuWyQoZGF0ZSArIiVZLSVtLSVkICVIOiVNOiVTIildLS0tLXNsZWVwIDYwcyBvY3Nfc2NyZWVuIC0tLS0iCiAgICAjIHNsZWVwIDYwCiAgICAjIChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9vY3Nfc2NyZWVuLnB5IC0taG9zdCAkYm1jX2hvc3QxLCRibWNfaG9zdDIsJGJtY19ob3N0MywkYm1jX2hvc3Q0IC0tcG9ydCAyLDQsNiw4IC0tc2tpcCBlcnJvcikJCiAgICAKICAgICMjIyNyZXN1bHQjIyMgICAgICAgIAogICAgZWNobyAtZSAiXG5bJChkYXRlICsiJVktJW0tJWQgJUg6JU06JVMiKV0tLS0tIOacrOi9rua1i+ivlee7k+aenCAtLS0tIgogICAgaWYgWyAiJGN1cnJlbnRfc3VjY2VzcyIgPSB0cnVlIF07IHRoZW4KICAgICAgICBlY2hvIC1lICJc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lK7mraXpqqQz77ya5pu/5o2i5aSa5Liq6L+e57ut56m65qC85Li65Y2V5Liq56m65qC877yM6KGl5YWo5Y+v6IO95pat6KOC55qE5a2X5q6177yI5aaCIFRFTVAg6KKr5ouG5YiG77yJCiAgICBjbWlzX21vbl9zdHIgPSByZS5zdWIocidccysnLCAnICcsIGNtaXNfbW9uX3N0cikuc3RyaXAoKQogICAgIyDpop3lpJblpITnkIbvvJrnoa7kv50gQ01JUyDlhbPplK7lrZflkI7ntKfot5/mlbDlrZfvvIjpgb/lhY3lrZfmrrXnspjov57vvIkKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NNSVMoXGQrKScsIHInQ01JUyBcMScsIGNtaXNfbW9uX3N0cikKICAgIGNtaXNfbW9uX3N0ciA9IHJlLnN1YihyJ0NIKFxkKyknLCByJ0NIIFwxJywgY21pc19tb25fc3RyKQoKICAgIHBhdHRlcm5zID0ge30KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5rip5bqm5qih5byP77ya5YW85a655a2X5q615L+u5aSN5ZCO55qE5qC85byPIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X3RlbXAiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgIHJmIkNNSVMge2NtaXNfbnVtfSBURU1QOiAoWystXT9cZCsoXC5cZCspPykgQyIsCiAgICAgICAgICAgIHJlLklHTk9SRUNBU0UKICAgICAgICApCgogICAgIyAtLS0tLS0tLS0tLS0tLS0tIOmAmumBk+WPguaVsOaooeW8j++8muS/neaMgeeLrOeri+WMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICByZiJDTUlTIHtjbWlzX251bX0gQ0gge2NoX251bX06ICguKj8pKD89IENNSVMgfCQpIiwgICMg5rOo5oSPIENIIOWQjuWKoOepuuagvO+8iOS/ruWkjeWQjuagvOW8j++8iQogICAgICAgICAgICAgICAgcmUuRE9UQUxMIHwgcmUuSUdOT1JFQ0FTRQogICAgICAgICAgICApCiAgICAgICAgICAgIHBhdHRlcm5zW2YiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV90eCJdID0gcmUuY29tcGlsZShyIlRYIChbKy1dP1xkKyhcLlxkKyk/KSBkQm0iLCByZS5JR05PUkVDQVNFKQogICAgICAgICAgICBwYXR0ZXJuc1tmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1faWJpYXMiXSA9IHJlLmNvbXBpbGUociJJQklBUyAoWystXT9cZCsoXC5cZCspPykgbUEiLCByZS5JR05PUkVDQVNFKQogICAgCiAgICByZXN1bHQgPSB7fQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLSDmj5Dlj5bmuKnluqbvvIjluKbosIPor5Xml6Xlv5fvvIkgLS0tLS0tLS0tLS0tLS0tLQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIHRlbXBfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV90ZW1wIgogICAgICAgIHRlbXBfbWF0Y2ggPSBwYXR0ZXJuc1t0ZW1wX2tleV0uc2VhcmNoKGNtaXNfbW9uX3N0cikKICAgICAgICByZXN1bHRbdGVtcF9rZXldID0gdGVtcF9tYXRjaC5ncm91cCgxKSBpZiB0ZW1wX21hdGNoIGVsc2UgTm9uZQogICAgICAgIGlmIHJlc3VsdFt0ZW1wX2tleV06CiAgICAgICAgICAgIHByaW50KGYi5oiQ5Yqf5Yy56YWNIENNSVMge2NtaXNfbnVtfSBURU1QOiB7cmVzdWx0W3RlbXBfa2V5XX0gQyIpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc3RhcnRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bX0iKQogICAgICAgICAgICBlbmRfaWR4ID0gY21pc19tb25fc3RyLmZpbmQoZiJDTUlTIHtjbWlzX251bSsxfSIpIGlmIGNtaXNfbnVtIDwgOCBlbHNlIGxlbihjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIHRhcmdldF9ibG9jayA9IGNtaXNfbW9uX3N0cltzdGFydF9pZHg6ZW5kX2lkeF0uc3RyaXAoKQogICAgICAgICAgICBwcmludChmIuitpuWRiu+8muacquWMuemFjeWIsCBDTUlTIHtjbWlzX251bX0gVEVNUO+8jOW9k+WJjeWMuuWdl+WGheWuue+8mnt0YXJnZXRfYmxvY2t9IikKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0g5o+Q5Y+W6YCa6YGT5Y+C5pWwIC0tLS0tLS0tLS0tLS0tLS0KICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIHJ4X2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9SWCIKICAgICAgICAgICAgaWJpYXNfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xhc2VyX2liaWFzIgoKICAgICAgICAgICAgbGluZV9wYXR0ZXJuID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2xpbmUiXQogICAgICAgICAgICBsaW5lX21hdGNoID0gbGluZV9wYXR0ZXJuLnNlYXJjaChjbWlzX21vbl9zdHIpCiAgICAgICAgICAgIGlmIG5vdCBsaW5lX21hdGNoOgogICAgICAgICAgICAgICAgcmVzdWx0W3R4X2tleV0gPSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IE5vbmUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGxpbmVfY29udGVudCA9IGxpbmVfbWF0Y2guZ3JvdXAoMSkKICAgICAgICAgICAgICAgIHR4X21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X3R4Il0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIGliaWFzX21hdGNoID0gcGF0dGVybnNbZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X2liaWFzIl0uc2VhcmNoKGxpbmVfY29udGVudCkKICAgICAgICAgICAgICAgIHJlc3VsdFt0eF9rZXldID0gdHhfbWF0Y2guZ3JvdXAoMSkgaWYgdHhfbWF0Y2ggZWxzZSBOb25lCiAgICAgICAgICAgICAgICByZXN1bHRbaWJpYXNfa2V5XSA9IGliaWFzX21hdGNoLmdyb3VwKDEpIGlmIGliaWFzX21hdGNoIGVsc2UgTm9uZQogICAgICAgICAgICByZXN1bHRbcnhfa2V5XSA9IE5vbmUKCiAgICByZXR1cm4gcmVzdWx0CgoKZGVmIHBhcnNlX3Jzc2lfZGF0YShyc3NpX3N0cik6CiAgICAiIiIKICAgIOino+aekCBSU1NJIOaWh+acrOaVsOaNru+8jOeUn+aIkCBDTUlTIDF+OCDlkIQgQ0gxfjgg55qEIFJYIOaYoOWwhOWtl+WFuAogICAg5Y+C5pWw77yacnNzaV9zdHIgLSDljIXlkKsgb2NzMX5vY3M4IOaVsOaNrueahOaWh+acrOWtl+espuS4sgogICAg6L+U5Zue77yacnNzaV9kaWN0IC0ge2NtaXNfbnVtOiBbQ0gxX1JYLCBDSDJfUlgsIC4uLiwgQ0g4X1JYXSwgLi4ufe+8iGNtaXNfbnVtIDF+OO+8iQogICAgIiIiCiAgICByc3NpX2RpY3QgPSB7Y21pc19udW06IFtOb25lIGZvciBfIGluIHJhbmdlKDgpXSBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSl9CiAgICByc3NpX2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiByc3NpX3N0ci5zcGxpdCgiXG4iKSBpZiBsaW5lLnN0cmlwKCldCiAgICAKICAgIGZvciBsaW5lIGluIHJzc2lfbGluZXM6CiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tIOWFs+mUruS/ruWkje+8muWMuemFjeaWueaLrOWPt+WMheijueeahOaVsOWAvCArIOS8mOWMluWMuemFjemAu+i+kSAtLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIyAxLiBcWzog5Yy56YWNIFJTU0lfREJNIOWQjueahOW3puaLrOWPtwoKICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaCgKICAgICAgICAgICAgciIuKj9vY3MoXGQrKVwuW146XSs6Lio/UlNTSV9EQk06XHMqXFtccyooWystXT9cZCtcLlxkKyg/OlxzKixccypbKy1dP1xkK1wuXGQrKSopXHMqXF0iLAogICAgICAgICAgICBsaW5lCiAgICAgICAgKQogICAgICAgIGlmIG5vdCBtYXRjaDoKICAgICAgICAgICAgIyDlv73nlaUgTmFtZXNwYWNlIOihjO+8iOato+W4uOeOsOixoe+8ie+8jOWFtuS7luacquWMuemFjeihjOaJjeaJk+WNsAogICAgICAgICAgICBpZiAiTmFtZXNwYWNlIiBub3QgaW4gbGluZToKICAgICAgICAgICAgICAgIHByaW50KGYi5pyq5Yy56YWN55qEUlNTSeihjO+8mntsaW5lfSIpCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgCiAgICAgICAgY21pc19udW0gPSBpbnQobWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgaWYgY21pc19udW0gPCAxIG9yIGNtaXNfbnVtID4gODoKICAgICAgICAgICAgY29udGludWUKICAgICAgICAKICAgICAgICAjIOaMieOAjOmAl+WPtyvnqbrmoLzjgI3liIblibLmlbDlgLzvvIjlhbzlrrnnuq/pgJflj7cv5aSa56m65qC877yJCiAgICAgICAgcnNzaV9kYm1fbGlzdCA9IHJlLnNwbGl0KHIiXHMqLFxzKiIsIG1hdGNoLmdyb3VwKDIpKQogICAgICAgICMg56Gu5L+d5Y+q5Y+W5YmNOOS4qumAmumBk++8iOmYsuatouaVsOaNruW8guW4uO+8iQogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UobWluKDgsIGxlbihyc3NpX2RibV9saXN0KSkpOgogICAgICAgICAgICByc3NpX2RpY3RbY21pc19udW1dW2NoX2lkeF0gPSByc3NpX2RibV9saXN0W2NoX2lkeF0KICAgIAogICAgcmV0dXJuIHJzc2lfZGljdAoKZGVmIHBhcnNlX3N3YWJfZGF0YShzd2FiX3N0cik6CiAgICAiIiIKICAgIOino+aekCBzd2FiIOaVsOaNru+8jOaPkOWPliBzbG90L2xhbmUg5a+55bqU55qEIHN3Yl9vbmV0Yl9oL3N3Yl9vbmV0YV9oL3N3YV9vbm9jX2gvc3dhX29uZXRfaCDlgLwKICAgIOWPguaVsO+8mnN3YWJfc3RyIC0g5YyF5ZCrIHN3YWIg5pWw5o2u55qE5paH5pys5a2X56ym5LiyCiAgICDov5Tlm57vvJpzd2FiX2RpY3QgLSB7KGNtaXNfbnVtLCBjaF9udW0pOiB7J3N3Yl9vbmV0Yl9oJzogdmFsLCAuLi59LCAuLi59CiAgICAiIiIKICAgIHN3YWJfZGljdCA9IHt9CiAgICAjIOWIneWni+WMluaJgOaciSBjbWlzKDEtOCkg5ZKMIGNoKDEtOCkg55qE6buY6K6k5YC85Li6IE5vbmUKICAgIGZvciBjbWlzX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICBmb3IgY2hfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgICAgICBzd2FiX2RpY3RbKGNtaXNfbnVtLCBjaF9udW0pXSA9IHsKICAgICAgICAgICAgICAgICdzd2Jfb25ldGJfaCc6IE5vbmUsCiAgICAgICAgICAgICAgICAnc3diX29uZXRhX2gnOiBOb25lLAogICAgICAgICAgICAgICAgJ3N3YV9vbm9jX2gnOiBOb25lLAogICAgICAgICAgICAgICAgJ3N3YV9vbmV0X2gnOiBOb25lCiAgICAgICAgICAgIH0KICAgIAogICAgc3dhYl9saW5lcyA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gc3dhYl9zdHIuc3BsaXQoIlxuIikgaWYgbGluZS5zdHJpcCgpXQogICAgIyDljLnphY3ooYznmoTmraPliJnooajovr7lvI8KICAgIHBhdHRlcm4gPSByZS5jb21waWxlKAogICAgICAgIHInLio/c2xvdDpccyooXGQrKSxccypsYW5lOlxzKihcZCspLFxzKnJlZzpccyooc3diX29uZXRiX2h8c3diX29uZXRhX2h8c3dhX29ub2NfaHxzd2Ffb25ldF9oKSxccyp2YWx1ZTpccyooXGQrKScKICAgICkKICAgIAogICAgZm9yIGxpbmUgaW4gc3dhYl9saW5lczoKICAgICAgICBtYXRjaCA9IHBhdHRlcm4uc2VhcmNoKGxpbmUpCiAgICAgICAgaWYgbm90IG1hdGNoOgogICAgICAgICAgICAjIOi3s+i/h+S4jeWMuemFjeeahOihjAogICAgICAgICAgICBjb250aW51ZQogICAgICAgIAogICAgICAgICMg5o+Q5Y+W5Yy56YWN57uT5p6cCiAgICAgICAgc2xvdCA9IGludChtYXRjaC5ncm91cCgxKSkgICMgc2xvdCDlr7nlupQgY21pc19udW3vvIhzbG905LuOMOW8gOWni++8jGNtaXPku44x5byA5aeL77yJCiAgICAgICAgbGFuZSA9IGludChtYXRjaC5ncm91cCgyKSkgICMgbGFuZSDlr7nlupQgY2hfbnVt77yIbGFuZeS7jjDlvIDlp4vvvIxjaOS7jjHlvIDlp4vvvIkKICAgICAgICByZWdfbmFtZSA9IG1hdGNoLmdyb3VwKDMpCiAgICAgICAgdmFsdWUgPSBtYXRjaC5ncm91cCg0KQogICAgICAgIAogICAgICAgICMg6L2s5o2i5Li6IGNtaXNfbnVtIOWSjCBjaF9udW3vvIgrMSDovazmjaLkuLoxLWJhc2Vk77yJCiAgICAgICAgY21pc19udW0gPSBzbG90ICsgMQogICAgICAgIGNoX251bSA9IGxhbmUgKyAxCiAgICAgICAgCiAgICAgICAgIyDlj6rlpITnkIYgMS04IOiMg+WbtOeahCBjbWlzIOWSjCBjaAogICAgICAgIGlmIDEgPD0gY21pc19udW0gPD0gOCBhbmQgMSA8PSBjaF9udW0gPD0gODoKICAgICAgICAgICAgc3dhYl9kaWN0WyhjbWlzX251bSwgY2hfbnVtKV1bcmVnX25hbWVdID0gdmFsdWUKICAgIAogICAgcmV0dXJuIHN3YWJfZGljdAoKZGVmIG1haW4oKToKCiAgICAjIDEuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWfuuehgOWPguaVsO+8iOWOn+mAu+i+keS/neeVme+8iQogICAgY3N2X2ZpbGUgPSBvcy5nZXRlbnYoIkNTVl9GSUxFIiwgIiIpICAgIAogICAgbG9vcCA9IG9zLmdldGVudigiTE9PUCIsICIiKSAgICAKICAgIGFjdGl2ZV9wb3J0ID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVCIsICIiKSAgIAogICAgY3Jvc3NfcG9ydCA9IG9zLmdldGVudigiQ1JPU1NfUE9SVCIsICIiKQogICAgCiAgICAjIDIuIOS7jueOr+Wig+WPmOmHj+ivu+WPluWQhOerr+WPo+eahCBDTUlTIOebkeaOp+aVsOaNru+8iOWOn+mAu+i+keS/neeVme+8iQogICAgYWN0aXZlX3BvcnRfY21pcyA9IG9zLmdldGVudigiQUNUSVZFX1BPUlRfQ01JUyIsICIiKQogICAgY3Jvc3NfcG9ydF9jbWlzID0gb3MuZ2V0ZW52KCJDUk9TU19QT1JUX0NNSVMiLCAiIikKCiAgICAKICAgICMgMy4g5LuO546v5aKD5Y+Y6YeP6K+75Y+W5ZCE56uv5Y+j55qEIFJTU0kg5pWw5o2u77yI55So5LqO5o+Q5Y+WIFJY77yJCiAgICBhY3RpdmVfcG9ydF9yc3NpID0gb3MuZ2V0ZW52KCJBQ1RJVkVfUE9SVF9SU1NJIiwgIiIpICAKICAgIGNyb3NzX3BvcnRfcnNzaSA9IG9zLmdldGVudigiQ1JPU1NfUE9SVF9SU1NJIiwgIiIpCgogICAgIyAzLiDku47njq/looPlj5jph4/or7vlj5ZhY3RpdmUgcG9ydOeahCBzd2Egc3diIOaVsOaNrgogICAgYWN0aXZlX3BvcnRfc3dhYiA9IG9zLmdldGVudigiQUNUSVZFX1BPUlRfU1dBQiIsICIiKSAgCiAgICAgCgogICAgIyA0LiDmj5Dlj5blkITnq6/lj6Pln7rnoYDlj4LmlbDvvIhUWC9JQklBUy/muKnluqbvvIkKICAgIHByaW50KGYiYnIxX3A0IOeahCBjbWlzIOino+aekOe7k+aenO+8mlxue2FjdGl2ZV9wb3J0X2NtaXN9IikKICAgIGFjdGl2ZV9wb3J0X3BhcmFtcyA9IGV4dHJhY3RfY21pc19wYXJhbXMoYWN0aXZlX3BvcnRfY21pcykKICAgIHByaW50KGYiYnIxX3A0IOeahCBjbWlzIOino+aekOe7k+aenO+8mlxue2FjdGl2ZV9wb3J0X3BhcmFtc30iKQogICAgY3Jvc3NfcG9ydF9wYXJhbXMgPSBleHRyYWN0X2NtaXNfcGFyYW1zKGNyb3NzX3BvcnRfY21pcykKCgogICAgIyA1LiDop6PmnpDlkITnq6/lj6MgUlNTSSDmlbDmja7vvIzopobnm5YgUlgg5YC8CiAgICAjIDUuMSDlpITnkIYgYWN0aXZlX3BvcnQKICAgIHByaW50KGYiYnIxX3A0IOeahCBSU1NJIOino+aekOe7k+aenO+8mlxue2FjdGl2ZV9wb3J0X3Jzc2l9IikKICAgIGFjdGl2ZV9wb3J0X3Jzc2lfZGljdCA9IHBhcnNlX3Jzc2lfZGF0YShhY3RpdmVfcG9ydF9yc3NpKQogICAgcHJpbnQoZiJicjFfcDQg55qEIFJTU0kg6Kej5p6Q57uT5p6c77yaXG57YWN0aXZlX3BvcnRfcnNzaV9kaWN0fSIpCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgZm9yIGNoX2lkeCBpbiByYW5nZSg4KToKICAgICAgICAgICAgY2hfbnVtID0gY2hfaWR4ICsgMQogICAgICAgICAgICByeF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fUlgiCiAgICAgICAgICAgIGFjdGl2ZV9wb3J0X3BhcmFtc1tyeF9rZXldID0gYWN0aXZlX3BvcnRfcnNzaV9kaWN0W2NtaXNfbnVtXVtjaF9pZHhdCiAgICAKICAgICMgNS4yIOWkhOeQhiBjcm9zc19wb3J0CiAgICBwcmludChmImNyb3NzX3BvcnQg55qEIFJTU0kg6Kej5p6Q57uT5p6c77yaXG57Y3Jvc3NfcG9ydF9yc3NpfSIpCiAgICBjcm9zc19wb3J0X3Jzc2lfZGljdCA9IHBhcnNlX3Jzc2lfZGF0YShjcm9zc19wb3J0X3Jzc2kpCiAgICBwcmludChmImJyMV9wNiDnmoQgUlNTSSDop6PmnpDnu5PmnpzvvJpcbntjcm9zc19wb3J0X3Jzc2lfZGljdH0iKQogICAgZm9yIGNtaXNfbnVtIGluIHJhbmdlKDEsIDkpOgogICAgICAgIGZvciBjaF9pZHggaW4gcmFuZ2UoOCk6CiAgICAgICAgICAgIGNoX251bSA9IGNoX2lkeCArIDEKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICBjcm9zc19wb3J0X3BhcmFtc1tyeF9rZXldID0gY3Jvc3NfcG9ydF9yc3NpX2RpY3RbY21pc19udW1dW2NoX2lkeF0KICAgIAogICAgIyA3LiDop6PmnpAgc3dhYiDmlbDmja4KICAgIHByaW50KGYiYWN0aXZlX3BvcnQg55qEIFNXQUIg6Kej5p6Q57uT5p6c77yaXG57YWN0aXZlX3BvcnRfc3dhYn0iKQogICAgc3dhYl9kYXRhID0gcGFyc2Vfc3dhYl9kYXRhKGFjdGl2ZV9wb3J0X3N3YWIpCiAgICBwcmludChmIuino+aekOWQjueahCBTV0FCIOaVsOaNru+8mlxue3N3YWJfZGF0YX0iKQoKICAgICMgNi4g57uE6KOF5pWw5o2u6KGM77yI5Y6f6YC76L6R5L+d55WZ77yJCiAgICByb3dzID0gW10KICAgIHBvcnRzID0gWwogICAgICAgIChhY3RpdmVfcG9ydCwgYWN0aXZlX3BvcnRfcGFyYW1zKSwKICAgICAgICAjKGNyb3NzX3BvcnQsIGNyb3NzX3BvcnRfcGFyYW1zKQogICAgXQogICAgbmV3X2hlYWRlciA9IFsiQUNUSVZFX1BPUlQiLCAiT0NTX1RPUE8iLCAiQ1JPU1NfUE9SVCIsICJPQ1MiLCAibGFuZSIsICJjcm9zc190ZW1wIiwgImNyb3NzX1JYIiwgImNyb3NzX1RYIiwgImNyb3NzX2liaWFzIiwgImF2dGl2ZV90ZW1wIiwgImF2dGl2ZV9SWCIsICJhdnRpdmVfVFgiLCAiYXZ0aXZlX2liaWFzIiwgImF2dGl2ZV9pYmlhcyIsCiAgICAgICAgInN3Yl9vbmV0Yl9oIiwgInN3Yl9vbmV0YV9oIiwgInN3YV9vbm9jX2giLCAic3dhX29uZXRfaCJdICAgIAoKCiAgICBmb3IgY21pc19udW0gaW4gcmFuZ2UoMSwgOSk6CiAgICAgICAgY3Jvc3NfdGVtcF92YWwgPSBjcm9zc19wb3J0X3BhcmFtcy5nZXQoZiJjbWlze2NtaXNfbnVtfV90ZW1wIikKICAgICAgICBhY3RpdmVfdGVtcF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KGYiY21pc3tjbWlzX251bX1fdGVtcCIpCiAgICAgICAgZm9yIGNoX251bSBpbiByYW5nZSgxLCA5KToKICAgICAgICAgICAgcnhfa2V5ID0gZiJjbWlze2NtaXNfbnVtfV9jaHtjaF9udW19X1JYIgogICAgICAgICAgICB0eF9rZXkgPSBmImNtaXN7Y21pc19udW19X2Noe2NoX251bX1fVFgiCiAgICAgICAgICAgIGliaWFzX2tleSA9IGYiY21pc3tjbWlzX251bX1fY2h7Y2hfbnVtfV9sYXNlcl9pYmlhcyIKICAgICAgICAgICAgCiAgICAgICAgICAgIGNyb3NzX3J4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGNyb3NzX3R4X3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldCh0eF9rZXkpCiAgICAgICAgICAgIGNyb3NzX2liaWFzX3ZhbCA9IGNyb3NzX3BvcnRfcGFyYW1zLmdldChpYmlhc19rZXkpCiAgICAgICAgICAgIAogICAgICAgICAgICBhY3RpdmVfcnhfdmFsID0gYWN0aXZlX3BvcnRfcGFyYW1zLmdldChyeF9rZXkpCiAgICAgICAgICAgIGFjdGl2ZV90eF92YWwgPSBhY3RpdmVfcG9ydF9wYXJhbXMuZ2V0KHR4X2tleSkKICAgICAgICAgICAgYWN0aXZlX2liaWFzX3ZhbCA9IGFjdGl2ZV9wb3J0X3BhcmFtcy5nZXQoaWJpYXNfa2V5KQoKICAgICAgICAgICAgIyDojrflj5Ygc3dhYiDnm7jlhbPlgLwKICAgICAgICAgICAgc3diX29uZXRiX2ggPSBzd2FiX2RhdGFbKGNtaXNfbnVtLCBjaF9udW0pXVsnc3diX29uZXRiX2gnXQogICAgICAgICAgICBzd2Jfb25ldGFfaCA9IHN3YWJfZGF0YVsoY21pc19udW0sIGNoX251bSldWydzd2Jfb25ldGFfaCddCiAgICAgICAgICAgIHN3YV9vbm9jX2ggPSBzd2FiX2RhdGFbKGNtaXNfbnVtLCBjaF9udW0pXVsnc3dhX29ub2NfaCddCiAgICAgICAgICAgIHN3YV9vbmV0X2ggPSBzd2FiX2RhdGFbKGNtaXNfbnVtLCBjaF9udW0pXVsnc3dhX29uZXRfaCddCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaWYgY3Jvc3NfcnhfdmFsIG9yIGNyb3NzX3R4X3ZhbCBvciBjcm9zc19pYmlhc192YWw6CiAgICAgICAgICAgICAgICByb3cgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICJBQ1RJVkVfUE9SVCI6IGFjdGl2ZV9wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAiT0NTX1RPUE8iOiBsb29wLCAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICJDUk9TU19QT1JUIjogY3Jvc3NfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgIk9DUyI6IGNtaXNfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAibGFuZSI6IGNoX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgImNyb3NzX3RlbXAiOiBjcm9zc190ZW1wX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImNyb3NzX1JYIjogY3Jvc3NfcnhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3NfVFgiOiBjcm9zc190eF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJjcm9zc19pYmlhcyI6IGNyb3NzX2liaWFzX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImF2dGl2ZV90ZW1wIjogYWN0aXZlX3RlbXBfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAiYXZ0aXZlX1JYIjogYWN0aXZlX3J4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgImF2dGl2ZV9UWCI6IGFjdGl2ZV90eF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICJhdnRpdmVfaWJpYXMiOiBhY3RpdmVfaWJpYXNfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAic3diX29uZXRiX2giOiBzd2Jfb25ldGJfaCwKICAgICAgICAgICAgICAgICAgICAgICAgInN3Yl9vbmV0YV9oIjogc3diX29uZXRhX2gsCiAgICAgICAgICAgICAgICAgICAgICAgICJzd2Ffb25vY19oIjogc3dhX29ub2NfaCwKICAgICAgICAgICAgICAgICAgICAgICAgInN3YV9vbmV0X2giOiBzd2Ffb25ldF9oCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KQoKICAgICMgNy4g5YaZ5YWlIENTVu+8iOWOn+mAu+i+keS/neeVme+8iQogICAgaWYgcm93czoKICAgICAgICBkZiA9IHBkLkRhdGFGcmFtZShyb3dzLCBjb2x1bW5zPW5ld19oZWFkZXIpCiAgICAgICAgd3JpdGVfaGVhZGVyID0gbm90IG9zLnBhdGguZXhpc3RzKGNzdl9maWxlKSBvciBvcy5wYXRoLmdldHNpemUoY3N2X2ZpbGUpID09IDAKICAgICAgICBkZi50b19jc3YoCiAgICAgICAgICAgIGNzdl9maWxlLAogICAgICAgICAgICBtb2RlPSJhIiwKICAgICAgICAgICAgaGVhZGVyPXdyaXRlX2hlYWRlciwKICAgICAgICAgICAgaW5kZXg9RmFsc2UsCiAgICAgICAgICAgIGVuY29kaW5nPSJ1dGYtOCIKICAgICAgICApCiAgICAgICAgcHJpbnQoZiLmlbDmja7lt7LlhpnlhaUge2Nzdl9maWxlfe+8iGFjdGl2ZV9wb3J0OnthY3RpdmVfcG9ydH3vvIkiKQogICAgZWxzZToKICAgICAgICBwcmludChmIuacquaPkOWPluWIsOS7u+S9lSBDTUlTIOmAmumBk+aVsOaNru+8iGFjdGl2ZV9wb3J0OnthY3RpdmVfcG9ydH0s77yJIikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdG9feWQvNjRfeHotb25ldF9zd2EtY3Jvc3N0YWxrLWJfb2NzX3Jzc2kuc2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDI0NjA0ADE1MTIwNzI2NjM3ADAyMDE2MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS9iaW4vYmFzaAoKIyBjb25maWd1cmUKcm9vdF91c2VyPSJyb290Igpyb290X3Bzc3dkPSJSQ21zQFp0ZTMiCnJlbW90ZV91c2VyPSJwaWN0IgpyZW1vdGVfcHNzd2Q9IlBpY1QxITJAMyM0JCIKZXhwX3Rvb2w9Ii4vc21idXMtdG9vbC9idWlsZC93aGl0ZXJpdmVyX2V4cC5leGUiCndhaXRfdGltZT0xMApsb29wX3RpbWVzPTEwMAoKcmVzZXRfZ3B1X2ZsYWc9ZmFsc2UKc2V0X3RvcG9fZmxhZz1mYWxzZQpydW5fYWxsPXRydWUgCgpjb25maWdfZmlsZT0ibm9kZV9jb25maWdzLmpzb24iICAKdGFyZ2V0X3N0YXJfbm9kZT0iIgpub2RlMV9pcD0iIgpub2RlMV9ibWM9IiIKbm9kZTJfaXA9IiIKbm9kZTJfYm1jPSIiCm5vZGUzX2lwPSIiCm5vZGUzX2JtYz0iIgpub2RlNF9pcD0iIgpub2RlNF9ibWM9IiIKc3Rhcl9ub2RlPSIiCgp3aGlsZSBbWyAkIyAtZ3QgMCBdXTsgZG8KICAgIGNhc2UgIiQxIiBpbgogICAgICAgIC0tbm9kZSkKICAgICAgICAgICAgc2hpZnQKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIFtbIC16ICIkMSIgfHwgIiQxIiA9fiBeLS0gXV07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gIumUmeivr++8mi0tbm9kZSDlkI7lv4XpobvmjIflrproioLngrnnvJblj7fvvIjlpoIgLS1ub2RlIDIx77yJIgogICAgICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIHRhcmdldF9zdGFyX25vZGU9IiQxIgogICAgICAgICAgICBzaGlmdAogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCgojIOagoemqjOS+nei1luWSjOmFjee9ruaWh+S7tgppZiAhIGNvbW1hbmQgLXYganEgJj4gL2Rldi9udWxsOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrmnKrlronoo4UganEg5bel5YW377yM6K+35YWI5omn6KGMICd5dW0gaW5zdGFsbCBqcSAteScg5oiWICdhcHQgaW5zdGFsbCBqcSAteScg5a6J6KOFIgogICAgZXhpdCAxCmZpCmlmIFtbIC16ICIkdGFyZ2V0X3N0YXJfbm9kZSIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8muW/hemhu+mAmui/hyAtLW5vZGUg5oyH5a6a6IqC54K557yW5Y+377yI5aaCIC0tbm9kZSAyMe+8iSIKICAgIGV4aXQgMQpmaQppZiBbWyAhIC1mICIkY29uZmlnX2ZpbGUiIF1dOyB0aGVuCiAgICBlY2hvICLplJnor6/vvJrphY3nva7mlofku7YgJGNvbmZpZ19maWxlIOS4jeWtmOWcqO+8jOivt+ajgOafpei3r+W+hCIKICAgIGV4aXQgMQpmaQoKZmlyc3Rfbm9kZT0iJHRhcmdldF9zdGFyX25vZGUiCnNlY29uZF9ub2RlPSIkKCh0YXJnZXRfc3Rhcl9ub2RlICsgNCkpIgojIOS7jkpTT07or7vlj5bphY3nva7vvIhqceino+aekO+8iQpub2RlMV9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUxX2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTFfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTJfaXA9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlMl9pcCIgIiRjb25maWdfZmlsZSIpCm5vZGUyX2JtYz0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGUyX2JtYyIgIiRjb25maWdfZmlsZSIpCm5vZGUzX2lwPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlM19ibWM9JChqcSAtciAiLlwiJHRhcmdldF9zdGFyX25vZGVcIi5ub2RlM19ibWMiICIkY29uZmlnX2ZpbGUiKQpub2RlNF9pcD0kKGpxIC1yICIuXCIkdGFyZ2V0X3N0YXJfbm9kZVwiLm5vZGU0X2lwIiAiJGNvbmZpZ19maWxlIikKbm9kZTRfYm1jPSQoanEgLXIgIi5cIiR0YXJnZXRfc3Rhcl9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTVfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNV9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTFfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTZfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlNl9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTJfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZTdfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlN19ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTNfYm1jIiAiJGNvbmZpZ19maWxlIikKbm9kZThfaXA9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfaXAiICIkY29uZmlnX2ZpbGUiKQpub2RlOF9ibWM9JChqcSAtciAiLlwiJHNlY29uZF9ub2RlXCIubm9kZTRfYm1jIiAiJGNvbmZpZ19maWxlIikKc3Rhcl9ub2RlPSIkdGFyZ2V0X3N0YXJfbm9kZSIKCmJtY19ob3N0MT0kKGVjaG8gIiRub2RlMV9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDI9JChlY2hvICIkbm9kZTJfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3QzPSQoZWNobyAiJG5vZGUzX2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0ND0kKGVjaG8gIiRub2RlNF9ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDU9JChlY2hvICIkbm9kZTVfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKYm1jX2hvc3Q2PSQoZWNobyAiJG5vZGU2X2JtYyIgfCBjdXQgLWQgJy4nIC1mIDQpCmJtY19ob3N0Nz0kKGVjaG8gIiRub2RlN19ibWMiIHwgY3V0IC1kICcuJyAtZiA0KQpibWNfaG9zdDg9JChlY2hvICIkbm9kZThfYm1jIiB8IGN1dCAtZCAnLicgLWYgNCkKCgojIOagoemqjOmFjee9ruWujOaVtOaApwppZiBbWyAiJG5vZGUxX2lwIiA9PSAibnVsbCIgfHwgLXogIiRub2RlMV9pcCIgXV07IHRoZW4KICAgIGVjaG8gIumUmeivr++8mumFjee9ruaWh+S7tuS4reacquaJvuWIsCBzdGFyX25vZGU9JHRhcmdldF9zdGFyX25vZGUg55qE5pyJ5pWI6YWN572uIgogICAgZXhpdCAxCmZpCgpjb252ZXJ0X25vZGUoKSB7CiAgICBsb2NhbCBpbnB1dF9ub2RlPSIkMSIKICAgIGxvY2FsIHN0YXJ0X25vZGU9IiQyIgogICAgbG9jYWwgbm9kZV9zdWZmaXgKICAgIGxvY2FsIHRhcmdldF9ub2RlX251bQogICAgbG9jYWwgdGFyZ2V0X25vZGUgICAgCiAgICBub2RlX3N1ZmZpeD0kKGVjaG8gIiRpbnB1dF9ub2RlIiB8IHNlZCAtbkUgJ3MvXm5vZGUoWzAtOV0rKSQvXDEvcCcpCgogICAgaWYgW1sgLXogIiRub2RlX3N1ZmZpeCIgXV07IHRoZW4KICAgICAgICBlY2hvICLplJnor6/vvJrovpPlhaUgbm9kZSDmoLzlvI/ml6DmlYjvvIzpnIDkuLogJ25vZGUr5pWw5a2XJ++8iOWmgiBub2RlMeOAgW5vZGUy77yJIiA+JjIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIGlmICEgW1sgIiRzdGFydF9ub2RlIiA9fiBeWzAtOV0rJCBdXTsgdGhlbgogICAgICAgIGVjaG8gIumUmeivr++8mui1t+Wni+WBj+enu+mHj+mcgOS4uuato+aVtOaVsCIgPiYyCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgIHRhcmdldF9ub2RlX251bT0kKChub2RlX3N1ZmZpeCArIHN0YXJ0X25vZGUgLSAxKSkKICAgIHRhcmdldF9ub2RlPSJub2RlJHRhcmdldF9ub2RlX251bSIKICAgIGVjaG8gIiR0YXJnZXRfbm9kZSIKICAgIHJldHVybiAwCn0KCgpjb2xsZWN0X29uZXRfY3Jvc3MoKSB7CiAgICBsb2NhbCBhY3RpdmVfYm1jPSIkMSIKICAgIGxvY2FsIGFjdGl2ZV9ibWNpcD0iJHshYWN0aXZlX2JtY30iICAKICAgIGxvY2FsIF9hY3RpdmVfbm9kZT0iJHthY3RpdmVfYm1jJV9ibWN9IgogICAgbG9jYWwgYWN0aXZlX3BvcnQ9JDIKICAgIGxvY2FsIGNyb3NzX2JtYz0kMwogICAgbG9jYWwgY3Jvc3NfYm1jaXA9IiR7IWNyb3NzX2JtY30iICAKICAgIGxvY2FsIF9jcm9zc19ub2RlPSIke2Nyb3NzX2JtYyVfYm1jfSIKICAgIGxvY2FsIGNyb3NzX3BvcnQ9JDQKICAgIGxvY2FsIGFjdGl2ZV9ob3N0PSJodHRwczovLyRhY3RpdmVfYm1jaXAiCiAgICBsb2NhbCBjcm9zc19ob3N0PSJodHRwczovLyRjcm9zc19ibWNpcCIKCiAgICBsb2NhbCBhY3RpdmVfbm9kZT0kKGNvbnZlcnRfbm9kZSAkX2FjdGl2ZV9ub2RlICRzdGFyX25vZGUpCiAgICBsb2NhbCBjcm9zc19ub2RlPSQoY29udmVydF9ub2RlICRfY3Jvc3Nfbm9kZSAkc3Rhcl9ub2RlKQogIAogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09IGFjdGl2ZV9wb3J0OiAkYWN0aXZlX3BvcnQgPT09PT09PT09PT09PT09IgogICAgI2FjdGl2YXRlX29jcyAgICAKICAgIGZvciBvY3MgaW4gezEuLjh9OyBkbwogICAgICAgIGZvciAoKG09MTsgbTw9MzsgbSsrKSk7IGRvCiAgICAgICAgICAgIGxvY2FsIGNtZD0iJGV4cF90b29sIC0taG9zdCAkYWN0aXZlX2hvc3QgLS1wb3J0ICRhY3RpdmVfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUgIAogICAgI2Rpc2FibGUgb2NzICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAweGZmIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUKICAgIAogICAgZWNobyAtZSAiXG53YWl0IDEwcywgb2NzIHN0YWJsZS4uLiIKICAgIHNsZWVwIDEwCiAgICAKICAgIGVjaG8gLWUgIlxuLS0tLS0gY29sbGVjdCBhY3RpdmVfcG9ydDogJGFjdGl2ZV9wb3J0IGRhdGEgLS0tLS0iCiAgICBsb2NhbCBhY3RpdmVfcG9ydF9jbWlzPSQob2NzZGlhZyAtaSAkYWN0aXZlX2JtY2lwIC1lICRhY3RpdmVfcG9ydCAtYyB2Y21kIC1wICJjbWlzIG1vbiIgMj4mMSkKICAgIGxvY2FsIGNyb3NzX3BvcnRfY21pcz0kKG9jc2RpYWcgLWkgJGNyb3NzX2JtY2lwIC1lICRjcm9zc19wb3J0IC1jIHZjbWQgLXAgImNtaXMgbW9uIiAyPiYxKQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImFjdGl2ZV9wb3J0X2NtaXMgJGFjdGl2ZV9ob3N0OiAkYWN0aXZlX3BvcnRfY21pcyIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJjcm9zc19wb3J0X2NtaXMgJGNyb3NzX2hvc3Q6ICRjcm9zc19wb3J0X2NtaXMiCiAgICBzbGVlcCAyCiAgICBsb2NhbCBjcm9zc19wb3J0X3Jzc2k9JChjZCBzbWJ1cy10b29sICYmIHB5dGhvbjMgc2NyaXB0cy9yZWFkX3Jzc2kucHkgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAyPiYxKQogICAgbG9jYWwgYWN0aXZlX3BvcnRfcnNzaT0kKGNkIHNtYnVzLXRvb2wgJiYgcHl0aG9uMyBzY3JpcHRzL3JlYWRfcnNzaS5weSAtLWhvc3QgJGFjdGl2ZV9ob3N0IC0tcG9ydCAkYWN0aXZlX3BvcnQgMj4mMSkKICAgICAgICAgICAgCiAgICAjIOiwg+ivlei+k+WHuu+8iOaMiemcgOW8gOWQr++8iQogICAgWyAkZGVidWdfbW9kZSAtZXEgMSBdICYmIGVjaG8gImNyb3NzX3BvcnRfcnNzaSAkY3Jvc3NfaG9zdDogJGNyb3NzX3BvcnRfcnNzaSIKICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICJhY3RpdmVfcG9ydF9yc3NpICRhY3RpdmVfaG9zdDogJGFjdGl2ZV9wb3J0X3Jzc2kiCiAgICAgICAgCiAgICBlY2hvIC1lICJcbi0tLS0g6LCD55SoIFB5dGhvbiDliIbmnpAgJGFjdGl2ZV9wb3J0IOaVsOaNriAtLS0tIiAgICAKICAgIGV4cG9ydCBDU1ZfRklMRT0iJGNzdl9maWxlIgogICAgZXhwb3J0IExPT1A9IiRpIgogICAgZXhwb3J0IEFDVElWRV9QT1JUPSIkYWN0aXZlX25vZGUtUCRhY3RpdmVfcG9ydCIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVD0iJGNyb3NzX25vZGUtUCRjcm9zc19wb3J0IgogICAgZXhwb3J0IEFDVElWRV9QT1JUX1JTU0k9IiRhY3RpdmVfcG9ydF9yc3NpIiBBQ1RJVkVfUE9SVF9DTUlTPSIkYWN0aXZlX3BvcnRfY21pcyIgCiAgICBleHBvcnQgQ1JPU1NfUE9SVF9SU1NJPSIkY3Jvc3NfcG9ydF9yc3NpIiBDUk9TU19QT1JUX0NNSVM9IiRjcm9zc19wb3J0X2NtaXMiCgogICAgcHl0aG9uMyBjb2xsZWN0X3Rlc3RfZGF0YV9vbm9jX3Jzc2kucHkgCiAgICAKICAgIHVuc2V0IENTVl9GSUxFIExPT1AgQUNUSVZFX0JNQyBBQ1RJVkVfUE9SVCBDUk9TU19CTUMgQ1JPU1NfUE9SVAogICAgdW5zZXQgQUNUSVZFX1BPUlRfUlNTSSBBQ1RJVkVfUE9SVF9DTUlTIENST1NTX1BPUlRfUlNTSSBDUk9TU19QT1JUX0NNSVMgICAgCgogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZV9ibWMgYWN0aXZlX3BvcnQ6ICRhY3RpdmVfcG9ydCDmlbDmja7lpITnkIblrozmiJAgPT09PT09PT09PT09PT09XG4iCiAgICBzbGVlcCAyCgkgZWNobyAtZSAiXG49PT09PT09PT09PT09JGFjdGl2ZSBjcm9zc19wb3J0ID09PT09PT09PT09PT09PVxuIgogICAgI2FjdGl2ZSBjcm9zc19wb3J0ICAgIAogICAgZm9yIG9jcyBpbiB7MS4uOH07IGRvCiAgICAgICAgZm9yICgobT0xOyBtPD0zOyBtKyspKTsgZG8KICAgICAgICAgICAgbG9jYWwgY21kPSIkZXhwX3Rvb2wgLS1ob3N0ICRjcm9zc19ob3N0IC0tcG9ydCAkY3Jvc3NfcG9ydCAtLWNtZCB3Yi1vY3MgLS1yZWcgMHgxMDAwODIgLS12YWx1ZSAwIC0tb2NzICRvY3MiCiAgICAgICAgICAgIFsgJGRlYnVnX21vZGUgLWVxIDEgXSAmJiBlY2hvICLmiafooYzlkb3ku6TvvJokY21kIgogICAgICAgICAgICBsb2NhbCBvdXRwdXQ9JCgkY21kIDI+JjEpCiAgICAgICAgICAgIGVjaG8gJG91dHB1dAogICAgICAgICAgICBpZiAhIGVjaG8gIiRvdXRwdXQiIHwgZ3JlcCAtcSAiTG9ja2VkIjsgdGhlbgogICAgICAgICAgICAgICAgc3VjY2Vzcz10cnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmaSAKICAgICAgICAgICAgc2xlZXAgMwogICAgICAgIGRvbmUKICAgIGRvbmUJCn0KTE9HX0ZJTEU9ImxvZ3Mvc3VtbWFyeV9sb2dzLzYyX3N0cmVzc18xMy0xNi1vbm9jX2NoZWNrX29jc3Bvd2VyXyQoZGF0ZSArJVklbSVkXyVIJU0lUykubG9nIgpjc3ZfZmlsZT0iY3N2X2RhdGEvNjRfeHotb25ldF9zd2EtY3Jvc3N0YWxrLWJfb2NzX3Jzc2lfJGJtY19ob3N0MS0kYm1jX2hvc3Q4XyQoZGF0ZSArJVklbSVkXyVIJU0lUykuY3N2IgoKIyDlkIzml7bovpPlh7rliLDnu4jnq6/lkozml6Xlv5fmlofku7YKZXhlYyA+ID4odGVlIC1hICIkTE9HX0ZJTEUiKSAyPiYxCiMg6K6w5b2V5byA5aeL5pe26Ze0CmVjaG8gIj09PSDmtYvor5XlvIDlp4vkuo46ICQoZGF0ZSkgPT09IgplY2hvICI9PT0g5pel5b+X5paH5Lu2OiAkTE9HX0ZJTEUgPT09IgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PSIKZWNobwoKZGVidWdfbW9kZT0xCmVjaG8gLWUgIlxuPT09PT09IHNldCBzcG5vZGUxICB0b3BvID09PT09PSIKZWNobwojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTFfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUxX2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMV9ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlMl9ibWMgNCBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTJfYm1jIDYgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUyX2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGUzX2JtYyA0IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlM19ibWMgNiBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTNfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTRfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU0X2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNF9ibWMgOCBvbm9jNiAmCmVjaG8KZWNobyAtZSAiXG49PT09PT0gc2V0IHNwbm9kZTIgIHRvcG8gPT09PT09IgplY2hvCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU1X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNV9ibWMgNCBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTVfYm1jIDYgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU1X2JtYyA4IG9ub2M2ICYKI2Jhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTZfYm1jIDIgb25vYzUgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU2X2JtYyA0IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlNl9ibWMgNiBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTZfYm1jIDggb25vYzYgJgojYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlN19ibWMgMiBvbm9jNSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZTdfYm1jIDQgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU3X2JtYyA2IG9uZXRhICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlN19ibWMgOCBvbm9jNiAmCiNiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU4X2JtYyAyIG9ub2M1ICYKYmFzaCBzZXRfcG9ydF90b3BvLnNoICRub2RlOF9ibWMgNCBvbmV0YSAmCmJhc2ggc2V0X3BvcnRfdG9wby5zaCAkbm9kZThfYm1jIDYgb25ldGEgJgpiYXNoIHNldF9wb3J0X3RvcG8uc2ggJG5vZGU4X2JtYyA4IG9ub2M2ICYKd2FpdAplY2hvICAKCmZvciAoKGk9MTsgaTw9JGxvb3BfdGltZXM7IGkrKykpOyBkbwogICAgZWNobyAtZSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT0g56ysICRpIOi9ruW+queOryA9PT09PT09PT09PT09PT09PT09PT0iCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCgogICAgI3Nwbm9kZTE+MgogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU2X2JtYyA0IG5vZGU0X2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTRfYm1jIDQgbm9kZTZfYm1jIDQKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlNl9ibWMgNiBub2RlM19ibWMgNgoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGUzX2JtYyA2IG5vZGU2X2JtYyA2CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTVfYm1jIDQgbm9kZTNfYm1jIDQKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlM19ibWMgNCBub2RlNV9ibWMgNAogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU1X2JtYyA2IG5vZGU0X2JtYyA2Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTRfYm1jIDYgbm9kZTVfYm1jIDYKICAgICNzcG5vZGUyPjEKICAgIGNvbGxlY3Rfb25ldF9jcm9zcyBub2RlMl9ibWMgNCBub2RlOF9ibWMgNAoJY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGU4X2JtYyA0IG5vZGUyX2JtYyA0CiAgICBjb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTJfYm1jIDYgbm9kZTdfYm1jIDYKCWNvbGxlY3Rfb25ldF9jcm9zcyBub2RlN19ibWMgNiBub2RlMl9ibWMgNgogICAgY29sbGVjdF9vbmV0X2Nyb3NzIG5vZGUxX2JtYyA0IG5vZGU3X2JtYyA0Cgljb2xsZWN0X29uZXRfY3Jvc3Mgbm9kZTdf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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA