# encoding: UTF-8
# JGRIT standalone installer. Same contents as the matching RBZ.
require "sketchup.rb"
require "base64"
require "fileutils"

begin
  destination = Sketchup.find_support_file("Plugins")
  raise "SketchUp Plugins folder not found" unless destination
  payload = {
    "jgrit_face_orient.rb" => "IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKcmVxdWlyZSAnc2tldGNodXAucmInCnJlcXVpcmUgJ2V4dGVuc2lvbnMucmInCnVubGVzcyBmaWxlX2xvYWRlZD8oX19GSUxFX18pCiAgZXh0ZW5zaW9uID0gU2tldGNodXBFeHRlbnNpb24ubmV3KCdKR1JJVCBGYWNlIE9yaWVudCcsICdqZ3JpdF9mYWNlX29yaWVudC9tYWluJykKICBleHRlbnNpb24uZGVzY3JpcHRpb24gPSAn66m0IOuwqe2WpSDsoJXrpqwg4oCUIOqzteqwnCDthYzsiqTtirgg67KE7KCEJwogIGV4dGVuc2lvbi52ZXJzaW9uID0gJzEuMS4xLWJldGEuMScKICBleHRlbnNpb24uY3JlYXRvciA9ICdKR1JJVCcKICBleHRlbnNpb24uY29weXJpZ2h0ID0gJzIwMjYgSkdSSVQnCiAgU2tldGNodXAucmVnaXN0ZXJfZXh0ZW5zaW9uKGV4dGVuc2lvbiwgdHJ1ZSkKICBmaWxlX2xvYWRlZChfX0ZJTEVfXykKZW5kCgo=",
    "jgrit_face_orient/icon.svg" => "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiBzdHJva2U9IiMzMDMzM2EiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDExIDE2IDVsMTEgNi0xMSA2eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Im01IDExIDExIDZ2MTFMNSAyMnoiIGZpbGw9IiMzMDMzM2EiLz48cGF0aCBkPSJtMTYgMTcgMTEtNnYxMWwtMTEgNnoiIGZpbGw9IiNmZjg1MWIiLz48cGF0aCBkPSJNNiA1YTEyIDEyIDAgMCAxIDE5IDBNMjUgMXY1aC01IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZjg1MWIiLz48L3N2Zz4KCg==",
    "jgrit_face_orient/main.rb" => "IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKCnJlcXVpcmUgJ3NrZXRjaHVwLnJiJwpyZXF1aXJlX3JlbGF0aXZlICd1aScKCm1vZHVsZSBKR1JJVAogIG1vZHVsZSBGYWNlT3JpZW50ZXIKICAgIGV4dGVuZCBzZWxmCgogICAgUExVR0lOX05BTUUgPSAnSkdSSVQg66m0IOuwqe2WpSDsnpDrj5kg7KCV66asJwogICAgT1BFUkFUSU9OX05BTUUgPSAnSkdSSVQg66m0IOuwqe2WpSDsnpDrj5kg7KCV66asJwogICAgVE9PTEJBUl9OQU1FID0gJ0pHUklUIOuptCDsoJXrpqwnCiAgICBFUFNJTE9OID0gMS4wZS04CgogICAgZGVmIHJ1bgogICAgICBtb2RlbCA9IFNrZXRjaHVwLmFjdGl2ZV9tb2RlbAogICAgICBzZWxlY3Rpb24gPSBtb2RlbC5zZWxlY3Rpb24udG9fYQoKICAgICAgaWYgc2VsZWN0aW9uLmVtcHR5PwogICAgICAgIFVJLm1lc3NhZ2Vib3goJ+ygleumrO2VoCDrqbQsIOq3uOujuSDrmJDripQg7Lu07Y+s64SM7Yq466W8IOuovOyggCDshKDtg53tlbTso7zshLjsmpQuJykKICAgICAgICByZXR1cm4KICAgICAgZW5kCgogICAgICBpZiBtb2RlbC5hY3RpdmVfcGF0aAogICAgICAgIFVJLm1lc3NhZ2Vib3goJ+2OuOynkSDrqqjrk5zrpbwg7KKF66OM7ZWY6rOgIOy1nOyDgeychCDqt7jro7kg65iQ64qUIOy7tO2PrOuEjO2KuOulvCDshKDtg53tlZwg65KkIOyLpO2Wie2VtOyjvOyEuOyalC4nKQogICAgICAgIHJldHVybgogICAgICBlbmQKCiAgICAgIHN0YXRzID0gewogICAgICAgIGZhY2VzOiAwLAogICAgICAgIHJldmVyc2VkOiAwLAogICAgICAgIHNoZWxsczogMCwKICAgICAgICBhbWJpZ3VvdXM6IDAsCiAgICAgICAgY29udGFpbmVyczogMCwKICAgICAgICBsb2NrZWQ6IDAKICAgICAgfQoKICAgICAgbW9kZWwuc3RhcnRfb3BlcmF0aW9uKE9QRVJBVElPTl9OQU1FLCB0cnVlKQoKICAgICAgYmVnaW4KICAgICAgICBpZGVudGl0eSA9IG1vZGVsLmVkaXRfdHJhbnNmb3JtCiAgICAgICAgcHJvY2Vzc19yb290X3NlbGVjdGlvbihzZWxlY3Rpb24sIGlkZW50aXR5LCBzdGF0cykKICAgICAgICBtb2RlbC5jb21taXRfb3BlcmF0aW9uCgogICAgICAgIGlmIHN0YXRzWzpmYWNlc10uemVybz8KICAgICAgICAgIFVJLm1lc3NhZ2Vib3goJ+yEoO2DnSDtla3rqqkg7JWI7JeQ7IScIOygleumrO2VoCDrqbTsnYQg7LC+7KeAIOuqu+2WiOyKteuLiOuLpC4nKQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZW5kCgogICAgICAgIG1lc3NhZ2UgPSBbCiAgICAgICAgICAi6rKA7IKs7ZWcIOuptDogI3tzdGF0c1s6ZmFjZXNdfeqwnCIsCiAgICAgICAgICAi65Kk7KeR7J2AIOuptDogI3tzdGF0c1s6cmV2ZXJzZWRdfeqwnCIsCiAgICAgICAgICAi7Jew6rKwIO2YleyDgTogI3tzdGF0c1s6c2hlbGxzXX3qsJwiCiAgICAgICAgXQogICAgICAgIG1lc3NhZ2UgPDwgIu2MkOygleydtCDrqqjtmLjtlZwg7Je066awIO2YleyDgTogI3tzdGF0c1s6YW1iaWd1b3VzXX3qsJwiIGlmIHN0YXRzWzphbWJpZ3VvdXNdLnBvc2l0aXZlPwogICAgICAgIG1lc3NhZ2UgPDwgIuyeoOq4tCDtla3rqqkg6rG064SI65yAOiAje3N0YXRzWzpsb2NrZWRdfeqwnCIgaWYgc3RhdHNbOmxvY2tlZF0ucG9zaXRpdmU/CiAgICAgICAgVUkubWVzc2FnZWJveChtZXNzYWdlLmpvaW4oIlxuIikpCiAgICAgIHJlc2N1ZSBTdGFuZGFyZEVycm9yID0+IGVycm9yCiAgICAgICAgbW9kZWwuYWJvcnRfb3BlcmF0aW9uCiAgICAgICAgVUkubWVzc2FnZWJveCgi66m0IOuwqe2WpSDsoJXrpqwg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXG4je2Vycm9yLm1lc3NhZ2V9IikKICAgICAgICBwdXRzICJbI3tQTFVHSU5fTkFNRX1dICN7ZXJyb3IuY2xhc3N9OiAje2Vycm9yLm1lc3NhZ2V9IgogICAgICAgIHB1dHMgZXJyb3IuYmFja3RyYWNlLmpvaW4oIlxuIikgaWYgZXJyb3IuYmFja3RyYWNlCiAgICAgIGVuZAogICAgZW5kCgogICAgZGVmIHByb2Nlc3Nfcm9vdF9zZWxlY3Rpb24oc2VsZWN0aW9uLCB0cmFuc2Zvcm1hdGlvbiwgc3RhdHMpCiAgICAgIHJhd19mYWNlcyA9IHNlbGVjdGlvbi5ncmVwKFNrZXRjaHVwOjpGYWNlKQogICAgICBzZWxlY3Rpb24uZ3JlcChTa2V0Y2h1cDo6RWRnZSkuZWFjaCB7IHxlZGdlfCByYXdfZmFjZXMuY29uY2F0KGVkZ2UuZmFjZXMpIH0KICAgICAgcmF3X2ZhY2VzLnNlbGVjdCEoJjp2YWxpZD8pCiAgICAgIHJhd19mYWNlcy51bmlxIQoKICAgICAgdW5sZXNzIHJhd19mYWNlcy5lbXB0eT8KICAgICAgICBleHBhbmRlZCA9IGV4cGFuZF9jb25uZWN0ZWRfZmFjZXMocmF3X2ZhY2VzKQogICAgICAgIHByb2Nlc3NfZmFjZXMoZXhwYW5kZWQsIHRyYW5zZm9ybWF0aW9uLCBzdGF0cykKICAgICAgZW5kCgogICAgICBzZWxlY3Rpb24uZWFjaCBkbyB8ZW50aXR5fAogICAgICAgIG5leHQgdW5sZXNzIGNvbnRhaW5lcj8oZW50aXR5KQoKICAgICAgICBwcm9jZXNzX2NvbnRhaW5lcihlbnRpdHksIHRyYW5zZm9ybWF0aW9uLCBzdGF0cykKICAgICAgZW5kCiAgICBlbmQKCiAgICBkZWYgcHJvY2Vzc19jb250YWluZXIoaW5zdGFuY2UsIHBhcmVudF90cmFuc2Zvcm1hdGlvbiwgc3RhdHMpCiAgICAgIHVubGVzcyBpbnN0YW5jZS52YWxpZD8KICAgICAgICByZXR1cm4KICAgICAgZW5kCgogICAgICBpZiBpbnN0YW5jZS5sb2NrZWQ/CiAgICAgICAgc3RhdHNbOmxvY2tlZF0gKz0gMQogICAgICAgIHJldHVybgogICAgICBlbmQKCiAgICAgIGluc3RhbmNlLm1ha2VfdW5pcXVlCiAgICAgIHN0YXRzWzpjb250YWluZXJzXSArPSAxCgogICAgICB0cmFuc2Zvcm1hdGlvbiA9IHBhcmVudF90cmFuc2Zvcm1hdGlvbiAqIGluc3RhbmNlLnRyYW5zZm9ybWF0aW9uCiAgICAgIGVudGl0aWVzID0gaW5zdGFuY2UuZGVmaW5pdGlvbi5lbnRpdGllcwogICAgICBmYWNlcyA9IGVudGl0aWVzLmdyZXAoU2tldGNodXA6OkZhY2UpLnNlbGVjdCgmOnZhbGlkPykKICAgICAgcHJvY2Vzc19mYWNlcyhmYWNlcywgdHJhbnNmb3JtYXRpb24sIHN0YXRzKSB1bmxlc3MgZmFjZXMuZW1wdHk/CgogICAgICBlbnRpdGllcy50b19hLmVhY2ggZG8gfGNoaWxkfAogICAgICAgIG5leHQgdW5sZXNzIGNvbnRhaW5lcj8oY2hpbGQpCgogICAgICAgIHByb2Nlc3NfY29udGFpbmVyKGNoaWxkLCB0cmFuc2Zvcm1hdGlvbiwgc3RhdHMpCiAgICAgIGVuZAogICAgZW5kCgogICAgZGVmIGNvbnRhaW5lcj8oZW50aXR5KQogICAgICBlbnRpdHkuaXNfYT8oU2tldGNodXA6Okdyb3VwKSB8fCBlbnRpdHkuaXNfYT8oU2tldGNodXA6OkNvbXBvbmVudEluc3RhbmNlKQogICAgZW5kCgogICAgZGVmIGV4cGFuZF9jb25uZWN0ZWRfZmFjZXMoc2VlZF9mYWNlcykKICAgICAgdmlzaXRlZCA9IHt9CiAgICAgIHF1ZXVlID0gc2VlZF9mYWNlcy5kdXAKICAgICAgaW5kZXggPSAwCgogICAgICB3aGlsZSBpbmRleCA8IHF1ZXVlLmxlbmd0aAogICAgICAgIGZhY2UgPSBxdWV1ZVtpbmRleF0KICAgICAgICBpbmRleCArPSAxCiAgICAgICAgbmV4dCB1bmxlc3MgZmFjZS52YWxpZD8KICAgICAgICBuZXh0IGlmIHZpc2l0ZWRbZmFjZV0KCiAgICAgICAgdmlzaXRlZFtmYWNlXSA9IHRydWUKICAgICAgICBmYWNlLmVkZ2VzLmVhY2ggZG8gfGVkZ2V8CiAgICAgICAgICBlZGdlLmZhY2VzLmVhY2ggeyB8bmVpZ2hib3J8IHF1ZXVlIDw8IG5laWdoYm9yIHVubGVzcyB2aXNpdGVkW25laWdoYm9yXSB9CiAgICAgICAgZW5kCiAgICAgIGVuZAoKICAgICAgdmlzaXRlZC5rZXlzCiAgICBlbmQKCiAgICBkZWYgcHJvY2Vzc19mYWNlcyhmYWNlcywgdHJhbnNmb3JtYXRpb24sIHN0YXRzKQogICAgICBmYWNlX2xvb2t1cCA9IHt9CiAgICAgIGZhY2VzLmVhY2ggeyB8ZmFjZXwgZmFjZV9sb29rdXBbZmFjZV0gPSB0cnVlIGlmIGZhY2UudmFsaWQ/IH0KICAgICAgcGVuZGluZyA9IGZhY2VfbG9va3VwLmtleXMKICAgICAgdmlzaXRlZCA9IHt9CgogICAgICBwZW5kaW5nLmVhY2ggZG8gfHNlZWR8CiAgICAgICAgbmV4dCBpZiB2aXNpdGVkW3NlZWRdCgogICAgICAgIHNoZWxsID0gY29sbGVjdF9zaGVsbChzZWVkLCBmYWNlX2xvb2t1cCwgdmlzaXRlZCkKICAgICAgICBuZXh0IGlmIHNoZWxsLmVtcHR5PwoKICAgICAgICBvcmllbnRfc2hlbGwoc2hlbGwsIHRyYW5zZm9ybWF0aW9uLCBzdGF0cykKICAgICAgZW5kCiAgICBlbmQKCiAgICBkZWYgY29sbGVjdF9zaGVsbChzZWVkLCBmYWNlX2xvb2t1cCwgdmlzaXRlZCkKICAgICAgc2hlbGwgPSBbXQogICAgICBxdWV1ZSA9IFtzZWVkXQogICAgICBpbmRleCA9IDAKCiAgICAgIHdoaWxlIGluZGV4IDwgcXVldWUubGVuZ3RoCiAgICAgICAgZmFjZSA9IHF1ZXVlW2luZGV4XQogICAgICAgIGluZGV4ICs9IDEKICAgICAgICBuZXh0IHVubGVzcyBmYWNlLnZhbGlkPwogICAgICAgIG5leHQgdW5sZXNzIGZhY2VfbG9va3VwW2ZhY2VdCiAgICAgICAgbmV4dCBpZiB2aXNpdGVkW2ZhY2VdCgogICAgICAgIHZpc2l0ZWRbZmFjZV0gPSB0cnVlCiAgICAgICAgc2hlbGwgPDwgZmFjZQogICAgICAgIGZhY2UuZWRnZXMuZWFjaCBkbyB8ZWRnZXwKICAgICAgICAgIGVkZ2UuZmFjZXMuZWFjaCBkbyB8bmVpZ2hib3J8CiAgICAgICAgICAgIHF1ZXVlIDw8IG5laWdoYm9yIGlmIGZhY2VfbG9va3VwW25laWdoYm9yXSAmJiAhdmlzaXRlZFtuZWlnaGJvcl0KICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQKCiAgICAgIHNoZWxsCiAgICBlbmQKCiAgICBkZWYgb3JpZW50X3NoZWxsKHNoZWxsLCB0cmFuc2Zvcm1hdGlvbiwgc3RhdHMpCiAgICAgIHBhcml0eSwgY29uZmxpY3RzID0gY29uc2lzdGVuY3lfcGFyaXR5KHNoZWxsKQogICAgICBnbG9iYWxfZmxpcCwgYW1iaWd1b3VzID0gY2hvb3NlX291dHdhcmRfZGlyZWN0aW9uKHNoZWxsLCBwYXJpdHksIHRyYW5zZm9ybWF0aW9uKQoKICAgICAgc2hlbGwuZWFjaCBkbyB8ZmFjZXwKICAgICAgICBuZXh0IHVubGVzcyBmYWNlLnZhbGlkPwoKICAgICAgICBzaG91bGRfZmxpcCA9IHBhcml0eS5mZXRjaChmYWNlLCBmYWxzZSkgXiBnbG9iYWxfZmxpcAogICAgICAgIG5leHQgdW5sZXNzIHNob3VsZF9mbGlwCgogICAgICAgIHJldmVyc2VfcHJlc2VydmluZ19tYXRlcmlhbHMoZmFjZSkKICAgICAgICBzdGF0c1s6cmV2ZXJzZWRdICs9IDEKICAgICAgZW5kCgogICAgICBzdGF0c1s6ZmFjZXNdICs9IHNoZWxsLmxlbmd0aAogICAgICBzdGF0c1s6c2hlbGxzXSArPSAxCiAgICAgIHN0YXRzWzphbWJpZ3VvdXNdICs9IDEgaWYgYW1iaWd1b3VzIHx8IGNvbmZsaWN0cy5wb3NpdGl2ZT8KICAgIGVuZAoKICAgIGRlZiBjb25zaXN0ZW5jeV9wYXJpdHkoc2hlbGwpCiAgICAgIGxvb2t1cCA9IHt9CiAgICAgIHNoZWxsLmVhY2ggeyB8ZmFjZXwgbG9va3VwW2ZhY2VdID0gdHJ1ZSB9CiAgICAgIHBhcml0eSA9IHt9CiAgICAgIGNvbmZsaWN0cyA9IDAKCiAgICAgIHNoZWxsLmVhY2ggZG8gfHNlZWR8CiAgICAgICAgbmV4dCBpZiBwYXJpdHkua2V5PyhzZWVkKQoKICAgICAgICBwYXJpdHlbc2VlZF0gPSBmYWxzZQogICAgICAgIHF1ZXVlID0gW3NlZWRdCiAgICAgICAgaW5kZXggPSAwCgogICAgICAgIHdoaWxlIGluZGV4IDwgcXVldWUubGVuZ3RoCiAgICAgICAgICBmYWNlID0gcXVldWVbaW5kZXhdCiAgICAgICAgICBpbmRleCArPSAxCiAgICAgICAgICBmYWNlLmVkZ2VzLmVhY2ggZG8gfGVkZ2V8CiAgICAgICAgICAgIGN1cnJlbnRfcmV2ZXJzZWQgPSBlZGdlLnJldmVyc2VkX2luPyhmYWNlKQogICAgICAgICAgICBuZXh0IGlmIGN1cnJlbnRfcmV2ZXJzZWQubmlsPwoKICAgICAgICAgICAgZWRnZS5mYWNlcy5lYWNoIGRvIHxuZWlnaGJvcnwKICAgICAgICAgICAgICBuZXh0IGlmIG5laWdoYm9yID09IGZhY2UKICAgICAgICAgICAgICBuZXh0IHVubGVzcyBsb29rdXBbbmVpZ2hib3JdCgogICAgICAgICAgICAgIG5laWdoYm9yX3JldmVyc2VkID0gZWRnZS5yZXZlcnNlZF9pbj8obmVpZ2hib3IpCiAgICAgICAgICAgICAgbmV4dCBpZiBuZWlnaGJvcl9yZXZlcnNlZC5uaWw/CgogICAgICAgICAgICAgIGV4cGVjdGVkID0gcGFyaXR5W2ZhY2VdIF4gKGN1cnJlbnRfcmV2ZXJzZWQgPT0gbmVpZ2hib3JfcmV2ZXJzZWQpCiAgICAgICAgICAgICAgaWYgcGFyaXR5LmtleT8obmVpZ2hib3IpCiAgICAgICAgICAgICAgICBjb25mbGljdHMgKz0gMSBpZiBwYXJpdHlbbmVpZ2hib3JdICE9IGV4cGVjdGVkCiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcGFyaXR5W25laWdoYm9yXSA9IGV4cGVjdGVkCiAgICAgICAgICAgICAgICBxdWV1ZSA8PCBuZWlnaGJvcgogICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQKCiAgICAgIFtwYXJpdHksIGNvbmZsaWN0c10KICAgIGVuZAoKICAgIGRlZiBjaG9vc2Vfb3V0d2FyZF9kaXJlY3Rpb24oc2hlbGwsIHBhcml0eSwgdHJhbnNmb3JtYXRpb24pCiAgICAgIG1ldHJpY3MgPSBzaGVsbF9tZXRyaWNzKHNoZWxsLCBwYXJpdHksIHRyYW5zZm9ybWF0aW9uKQoKICAgICAgaWYgY2xvc2VkX3NoZWxsPyhzaGVsbCkgJiYgbWV0cmljc1s6c2lnbmVkX3ZvbHVtZV0uYWJzID4gbWV0cmljc1s6dm9sdW1lX3RvbGVyYW5jZV0KICAgICAgICByZXR1cm4gWyhtZXRyaWNzWzpzaWduZWRfdm9sdW1lXSAqIHRyYW5zZm9ybWF0aW9uLnhheGlzLmNyb3NzKHRyYW5zZm9ybWF0aW9uLnlheGlzKS5kb3QodHJhbnNmb3JtYXRpb24uemF4aXMpKSA8IDAuMCwgZmFsc2VdCiAgICAgIGVuZAoKICAgICAgaWYgbWV0cmljc1s6bWF0ZXJpYWxfc2NvcmVdLmFicyA+IG1ldHJpY3NbOmFyZWFdICogMC4wNQogICAgICAgIHJldHVybiBbbWV0cmljc1s6bWF0ZXJpYWxfc2NvcmVdIDwgMC4wLCBmYWxzZV0KICAgICAgZW5kCgogICAgICBpZiBtZXRyaWNzWzpvdXR3YXJkX3Njb3JlXS5hYnMgPiBtZXRyaWNzWzpvdXR3YXJkX3RvbGVyYW5jZV0KICAgICAgICByZXR1cm4gW21ldHJpY3NbOm91dHdhcmRfc2NvcmVdIDwgMC4wLCBmYWxzZV0KICAgICAgZW5kCgogICAgICBub3JtYWwgPSBtZXRyaWNzWzpub3JtYWxfc3VtXQogICAgICB1bmxlc3Mgbm9ybWFsLmxlbmd0aCA8IEVQU0lMT04KICAgICAgICBub3JtYWwubm9ybWFsaXplIQogICAgICAgIGlmIG5vcm1hbC56LmFicyA+IDAuMzUKICAgICAgICAgIHJldHVybiBbbm9ybWFsLnogPCAwLjAsIGZhbHNlXQogICAgICAgIGVuZAoKICAgICAgICBjYW1lcmFfdmVjdG9yID0gbWV0cmljc1s6Y2VudGVyXS52ZWN0b3JfdG8oU2tldGNodXAuYWN0aXZlX21vZGVsLmFjdGl2ZV92aWV3LmNhbWVyYS5leWUpCiAgICAgICAgdW5sZXNzIGNhbWVyYV92ZWN0b3IubGVuZ3RoIDwgRVBTSUxPTgogICAgICAgICAgcmV0dXJuIFtub3JtYWwuZG90KGNhbWVyYV92ZWN0b3IpIDwgMC4wLCB0cnVlXQogICAgICAgIGVuZAogICAgICBlbmQKCiAgICAgIFtmYWxzZSwgdHJ1ZV0KICAgIGVuZAoKICAgIGRlZiBjbG9zZWRfc2hlbGw/KHNoZWxsKQogICAgICBsb29rdXAgPSB7fQogICAgICBzaGVsbC5lYWNoIHsgfGZhY2V8IGxvb2t1cFtmYWNlXSA9IHRydWUgfQoKICAgICAgc2hlbGwuYWxsPyBkbyB8ZmFjZXwKICAgICAgICBmYWNlLmVkZ2VzLmFsbD8gZG8gfGVkZ2V8CiAgICAgICAgICBlZGdlLmZhY2VzLmNvdW50IHsgfG5laWdoYm9yfCBsb29rdXBbbmVpZ2hib3JdIH0gPT0gMgogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKICAgIGRlZiBzaGVsbF9tZXRyaWNzKHNoZWxsLCBwYXJpdHksIHRyYW5zZm9ybWF0aW9uKQogICAgICBib3VuZHMgPSBHZW9tOjpCb3VuZGluZ0JveC5uZXcKICAgICAgc2hlbGwuZWFjaCBkbyB8ZmFjZXwKICAgICAgICBmYWNlLnZlcnRpY2VzLmVhY2ggeyB8dmVydGV4fCBib3VuZHMuYWRkKHZlcnRleC5wb3NpdGlvbi50cmFuc2Zvcm0odHJhbnNmb3JtYXRpb24pKSB9CiAgICAgIGVuZAogICAgICBjZW50ZXIgPSBib3VuZHMuY2VudGVyCiAgICAgIGRpYWdvbmFsID0gYm91bmRzLm1pbi5kaXN0YW5jZShib3VuZHMubWF4KQogICAgICBhcmVhID0gMC4wCiAgICAgIHNpZ25lZF92b2x1bWUgPSAwLjAKICAgICAgb3V0d2FyZF9zY29yZSA9IDAuMAogICAgICBtYXRlcmlhbF9zY29yZSA9IDAuMAogICAgICBub3JtYWxfc3VtID0gR2VvbTo6VmVjdG9yM2QubmV3KDAsIDAsIDApCgogICAgICBzaGVsbC5lYWNoIGRvIHxmYWNlfAogICAgICAgIHRyaWFuZ2xlcyA9IHRyYW5zZm9ybWVkX3RyaWFuZ2xlcyhmYWNlLCB0cmFuc2Zvcm1hdGlvbikKICAgICAgICBmYWNlX2FyZWEgPSAwLjAKICAgICAgICBmYWNlX2NlbnRlcl9zdW0gPSBHZW9tOjpWZWN0b3IzZC5uZXcoMCwgMCwgMCkKICAgICAgICBmYWNlX25vcm1hbF9zdW0gPSBHZW9tOjpWZWN0b3IzZC5uZXcoMCwgMCwgMCkKICAgICAgICBmYWNlX3ZvbHVtZSA9IDAuMAoKICAgICAgICB0cmlhbmdsZXMuZWFjaCBkbyB8cDAsIHAxLCBwMnwKICAgICAgICAgIGNyb3NzID0gKHAxIC0gcDApLmNyb3NzKHAyIC0gcDApCiAgICAgICAgICB0cmlhbmdsZV9hcmVhID0gY3Jvc3MubGVuZ3RoICogMC41CiAgICAgICAgICBuZXh0IGlmIHRyaWFuZ2xlX2FyZWEgPCBFUFNJTE9OCgogICAgICAgICAgdHJpYW5nbGVfY2VudGVyID0gR2VvbTo6UG9pbnQzZC5uZXcoCiAgICAgICAgICAgIChwMC54ICsgcDEueCArIHAyLngpIC8gMy4wLAogICAgICAgICAgICAocDAueSArIHAxLnkgKyBwMi55KSAvIDMuMCwKICAgICAgICAgICAgKHAwLnogKyBwMS56ICsgcDIueikgLyAzLjAKICAgICAgICAgICkKICAgICAgICAgIGZhY2VfYXJlYSArPSB0cmlhbmdsZV9hcmVhCiAgICAgICAgICBmYWNlX2NlbnRlcl9zdW0gKz0gR2VvbTo6VmVjdG9yM2QubmV3KAogICAgICAgICAgICB0cmlhbmdsZV9jZW50ZXIueCAqIHRyaWFuZ2xlX2FyZWEsCiAgICAgICAgICAgIHRyaWFuZ2xlX2NlbnRlci55ICogdHJpYW5nbGVfYXJlYSwKICAgICAgICAgICAgdHJpYW5nbGVfY2VudGVyLnogKiB0cmlhbmdsZV9hcmVhCiAgICAgICAgICApCiAgICAgICAgICBmYWNlX25vcm1hbF9zdW0gKz0gY3Jvc3MKICAgICAgICAgIHAxX3ZlY3RvciA9IEdlb206OlZlY3RvcjNkLm5ldyhwMS54LCBwMS55LCBwMS56KQogICAgICAgICAgcDJfdmVjdG9yID0gR2VvbTo6VmVjdG9yM2QubmV3KHAyLngsIHAyLnksIHAyLnopCiAgICAgICAgICBmYWNlX3ZvbHVtZSArPSBkb3RfcG9pbnRfdmVjdG9yKHAwLCBwMV92ZWN0b3IuY3Jvc3MocDJfdmVjdG9yKSkgLyA2LjAKICAgICAgICBlbmQKCiAgICAgICAgbmV4dCBpZiBmYWNlX2FyZWEgPCBFUFNJTE9OCgogICAgICAgIGZhY2VfY2VudGVyID0gR2VvbTo6UG9pbnQzZC5uZXcoCiAgICAgICAgICBmYWNlX2NlbnRlcl9zdW0ueCAvIGZhY2VfYXJlYSwKICAgICAgICAgIGZhY2VfY2VudGVyX3N1bS55IC8gZmFjZV9hcmVhLAogICAgICAgICAgZmFjZV9jZW50ZXJfc3VtLnogLyBmYWNlX2FyZWEKICAgICAgICApCiAgICAgICAgZmFjZV9ub3JtYWwgPSBmYWNlX25vcm1hbF9zdW0KICAgICAgICBmYWNlX25vcm1hbC5ub3JtYWxpemUhIHVubGVzcyBmYWNlX25vcm1hbC5sZW5ndGggPCBFUFNJTE9OCgogICAgICAgIGlmIHBhcml0eS5mZXRjaChmYWNlLCBmYWxzZSkKICAgICAgICAgIGZhY2Vfbm9ybWFsLnJldmVyc2UhCiAgICAgICAgICBmYWNlX3ZvbHVtZSA9IC1mYWNlX3ZvbHVtZQogICAgICAgIGVuZAoKICAgICAgICBhcmVhICs9IGZhY2VfYXJlYQogICAgICAgIHNpZ25lZF92b2x1bWUgKz0gZmFjZV92b2x1bWUKICAgICAgICBvdXR3YXJkX3Njb3JlICs9IGZhY2Vfbm9ybWFsLmRvdChjZW50ZXIudmVjdG9yX3RvKGZhY2VfY2VudGVyKSkgKiBmYWNlX2FyZWEKICAgICAgICBub3JtYWxfc3VtICs9IEdlb206OlZlY3RvcjNkLm5ldygKICAgICAgICAgIGZhY2Vfbm9ybWFsLnggKiBmYWNlX2FyZWEsCiAgICAgICAgICBmYWNlX25vcm1hbC55ICogZmFjZV9hcmVhLAogICAgICAgICAgZmFjZV9ub3JtYWwueiAqIGZhY2VfYXJlYQogICAgICAgICkKCiAgICAgICAgZnJvbnRfd2VpZ2h0ID0gZmFjZS5tYXRlcmlhbCA/IDEuMCA6IDAuMAogICAgICAgIGJhY2tfd2VpZ2h0ID0gZmFjZS5iYWNrX21hdGVyaWFsID8gMS4wIDogMC4wCiAgICAgICAgbWF0ZXJpYWxfc2NvcmUgKz0gKGZyb250X3dlaWdodCAtIGJhY2tfd2VpZ2h0KSAqIGZhY2VfYXJlYSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcml0eS5mZXRjaChmYWNlLCBmYWxzZSkgPyAtMS4wIDogMS4wKQogICAgICBlbmQKCiAgICAgIHsKICAgICAgICBjZW50ZXI6IGNlbnRlciwKICAgICAgICBhcmVhOiBhcmVhLAogICAgICAgIHNpZ25lZF92b2x1bWU6IHNpZ25lZF92b2x1bWUsCiAgICAgICAgb3V0d2FyZF9zY29yZTogb3V0d2FyZF9zY29yZSwKICAgICAgICBtYXRlcmlhbF9zY29yZTogbWF0ZXJpYWxfc2NvcmUsCiAgICAgICAgbm9ybWFsX3N1bTogbm9ybWFsX3N1bSwKICAgICAgICB2b2x1bWVfdG9sZXJhbmNlOiBbZGlhZ29uYWwqKjMgKiAxLjBlLTksIEVQU0lMT05dLm1heCwKICAgICAgICBvdXR3YXJkX3RvbGVyYW5jZTogW2FyZWEgKiBbZGlhZ29uYWwsIDEuMF0ubWF4ICogMS4wZS02LCBFUFNJTE9OXS5tYXgKICAgICAgfQogICAgZW5kCgogICAgZGVmIHRyYW5zZm9ybWVkX3RyaWFuZ2xlcyhmYWNlLCB0cmFuc2Zvcm1hdGlvbikKICAgICAgbWVzaCA9IGZhY2UubWVzaAogICAgICB0cmlhbmdsZXMgPSBbXQoKICAgICAgbWVzaC5wb2x5Z29ucy5lYWNoIGRvIHxwb2x5Z29ufAogICAgICAgIHBvaW50cyA9IHBvbHlnb24ubWFwIHsgfGluZGV4fCBtZXNoLnBvaW50X2F0KGluZGV4LmFicykudHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKSB9CiAgICAgICAgbmV4dCBpZiBwb2ludHMubGVuZ3RoIDwgMwoKICAgICAgICAoMS4uLihwb2ludHMubGVuZ3RoIC0gMSkpLmVhY2ggZG8gfGluZGV4fAogICAgICAgICAgdHJpYW5nbGVzIDw8IFtwb2ludHNbMF0sIHBvaW50c1tpbmRleF0sIHBvaW50c1tpbmRleCArIDFdXQogICAgICAgIGVuZAogICAgICBlbmQKCiAgICAgIHRyaWFuZ2xlcwogICAgZW5kCgogICAgZGVmIGRvdF9wb2ludF92ZWN0b3IocG9pbnQsIHZlY3RvcikKICAgICAgcG9pbnQueCAqIHZlY3Rvci54ICsgcG9pbnQueSAqIHZlY3Rvci55ICsgcG9pbnQueiAqIHZlY3Rvci56CiAgICBlbmQKCiAgICBkZWYgcmV2ZXJzZV9wcmVzZXJ2aW5nX21hdGVyaWFscyhmYWNlKQogICAgICBmcm9udF9tYXRlcmlhbCA9IGZhY2UubWF0ZXJpYWwKICAgICAgYmFja19tYXRlcmlhbCA9IGZhY2UuYmFja19tYXRlcmlhbAogICAgICByZXR1cm4gZmFsc2UgdW5sZXNzIGZhY2UucmV2ZXJzZSEKCiAgICAgIGZhY2UubWF0ZXJpYWwgPSBiYWNrX21hdGVyaWFsCiAgICAgIGZhY2UuYmFja19tYXRlcmlhbCA9IGZyb250X21hdGVyaWFsCiAgICAgIHRydWUKICAgIGVuZAoKICAgIHVubGVzcyBmaWxlX2xvYWRlZD8oX19GSUxFX18pCiAgICAgIEpHUklUOjpUb29sc1VJLmFkZCgnZmFjZV9vcmllbnQnLCAnSkdSSVQgRmFjZSBPcmllbnQnLCAn66m0IOuwqe2WpSDsoJXrpqwnLCBGaWxlLmpvaW4oX19kaXJfXywgJ2ljb24uc3ZnJykpIHsgcnVuIH0KICAgICAgZmlsZV9sb2FkZWQoX19GSUxFX18pCiAgICBlbmQKICBlbmQKZW5kCgo=",
    "jgrit_face_orient/README.txt" => "SkdSSVQgRmFjZSBPcmllbnQgMS4xLjEtYmV0YS4xCuuptCDrsKntlqUg7KCV66asCgrqs7XqsJwg7YWM7Iqk7Yq4IOuyhOyghOyeheuLiOuLpC4gU2tldGNoVXAg7Iuk7KCcIOuqqOuNuOyXkOyEnOydmCDsnpHrj5kg6rKA7Kad7J2AIOyVhOyngSDsmYTro4zrkJjsp4Ag7JWK7JWY7Iq164uI64ukLgpXaW5kb3dzIOuNsOyKpO2BrO2GsSBTa2V0Y2hVcCAyMDI066W8IOuMgOyDgeycvOuhnCDsnpHshLHtlojsirXri4jri6QuIOuLpOuluCDrsoTsoITqs7wgbWFjT1PripQg66+46rKA7Kad7J6F64uI64ukLgrsnpHsl4Ug7YyM7J287J2YIOuzteyCrOuzuOyXkOyEnCDrqLzsoIAg7Iuk7ZaJ7ZWY6rOgIOqysOqzvOulvCDtmZXsnbjtlZjshLjsmpQuIOyekeyXheydgCBDdHJsK1rroZwg7Iuk7ZaJIOy3qOyGjO2VoCDsiJgg7J6I7Iq164uI64ukLgoK7ISk7LmYOiDtmZXsnqUg7ZSE66Gc6re4656oIOq0gOumrOyekCA+IO2ZleyepSDtlITroZzqt7jrnqgg7ISk7LmYID4gUkJaIOyEoO2DnS4K7Iuk7ZaJOiDrs7TquLAgPiDrj4Tqtawg66qo7J2MID4gSkdSSVQgVG9vbHMg65iQ64qUIO2ZleyepSDtlITroZzqt7jrnqggPiBKR1JJVCBUb29scy4K6riw7KG0IEpTVFVESU8g64+Z66qFIOuPhOq1rOulvCDtlajqu5gg7ISk7LmY7ZWY66m0IOuplOuJtOqwgCDrkZgg64ukIO2RnOyLnOuQoCDsiJgg7J6I7Iq164uI64ukLgoK7LWc7IOB7JyE7JeQ7IScIOuptMK36re466O5wrfsu7Ttj6zrhIztirjrpbwg7ISg7YOd7ZWp64uI64ukLiDsl7DqsrDrkJwg66m06rO8IOykkeyyqSDtla3rqqnquYzsp4Ag7LKY66as7ZWY66mwIOyEoO2Dne2VnCDsu7Ttj6zrhIztirjripQg6rOg7Jyg7ZmU65Cp64uI64ukLiDsl7TrprAg66m07J2AIOyerOyniMK37IOB7ZWYwrfsubTrqZTrnbzrpbwg7LC46rOg7ZWcIOy2lOygleyeheuLiOuLpC4g67O17J6h7ZWcIOq1kOywqCDtmJXsg4Hqs7wg7J6s7KeI7J2YIO2FjeyKpOyymCDsnITsuZjripQg67CY65Oc7IucIOqysOqzvOulvCDtmZXsnbjtlZjshLjsmpQuCgpKR1JJVCDrrLTro4wg7YWM7Iqk7Yq4IOudvOydtOyEoOyKpArqsJzsnbgg67CPIOyXheustCDtlITroZzsoJ3tirjsl5DshJwg66y066OMIOyCrOyaqeydhCDtl4jsmqntlanri4jri6QuCuycoOujjCDsnqztjJDrp6Qg67CPIEpHUklUIOuqhey5reydhCDsoJzqsbDtlZwg7J6s67Cw7Y+s64qUIO2XiOyaqe2VmOyngCDslYrsirXri4jri6QuCu2UvOuTnOuwsSDrsI8g7LWc7IugIOuyhOyghDogaHR0cHM6Ly9qZ3JpdC5rci9kb3dubG9hZHMKCuuzgOqyvTogSkdSSVQg66qF7LmtLCDsoJztkojrs4Qg7JWE7J207L2YLCDqs7XthrUg7Yi067CU7JmAIFJCWiDqtazshLEuCgoKCuyEpOy5mCDtm4QgU2tldGNoVXDsnYQg64uk7IucIOyLnOyeke2VmOyEuOyalC4g67O06riwID4g64+E6rWsIOuqqOydjCA+IEpHUklUIFRvb2xz7JeQ7IScIOyEpOy5mO2VnCDro6jruYTrpbwg7ZWo6ruYIOyCrOyaqe2VoCDsiJgg7J6I7Iq164uI64ukLiDqsIEg64+E6rWs64qUIOqwnOuzhCDshKTsuZjrkKnri4jri6QuCg==",
    "jgrit_face_orient/ui.rb" => "IyBmcm96ZW5fc3RyaW5nX2xpdGVyYWw6IHRydWUKbW9kdWxlIEpHUklUCiAgbW9kdWxlIFRvb2xzVUkKICAgIGRlZiBzZWxmLnJlZ2lzdGVyKGtleSwgY29tbWFuZCkKICAgICAgQGNvbW1hbmRzIHx8PSB7fQogICAgICByZXR1cm4gQGNvbW1hbmRzW2tleV0gaWYgQGNvbW1hbmRzW2tleV0KICAgICAgQG1lbnUgfHw9IFVJLm1lbnUoJ0V4dGVuc2lvbnMnKS5hZGRfc3VibWVudSgnSkdSSVQgVG9vbHMnKQogICAgICBAdG9vbGJhciB8fD0gVUk6OlRvb2xiYXIubmV3KCdKR1JJVCBUb29scycpCiAgICAgIEBjb21tYW5kc1trZXldID0gY29tbWFuZAogICAgICBAbWVudS5hZGRfaXRlbShjb21tYW5kKQogICAgICBAdG9vbGJhci5hZGRfaXRlbShjb21tYW5kKQogICAgICBAdG9vbGJhci5nZXRfbGFzdF9zdGF0ZSA9PSAtMSA/IEB0b29sYmFyLnNob3cgOiBAdG9vbGJhci5yZXN0b3JlCiAgICAgIGNvbW1hbmQKICAgIGVuZAogICAgZGVmIHNlbGYuYWRkKGtleSwgdGl0bGUsIGRlc2NyaXB0aW9uLCBpY29uX3BhdGggPSBuaWwsICZibG9jaykKICAgICAgY29tbWFuZCA9IFVJOjpDb21tYW5kLm5ldyh0aXRsZSwgJmJsb2NrKQogICAgICBjb21tYW5kLnRvb2x0aXAgPSB0aXRsZQogICAgICBjb21tYW5kLnN0YXR1c19iYXJfdGV4dCA9IGRlc2NyaXB0aW9uCiAgICAgIGljb25fcGF0aCB8fD0gRmlsZS5qb2luKF9fZGlyX18sICdpY29uLnN2ZycpCiAgICAgIGNvbW1hbmQuc21hbGxfaWNvbiA9IGNvbW1hbmQubGFyZ2VfaWNvbiA9IGljb25fcGF0aAogICAgICByZWdpc3RlcihrZXksIGNvbW1hbmQpCiAgICBlbmQKICBlbmQKZW5kCg=="
  }
  payload.each do |relative, encoded|
    target = File.join(destination, relative)
    FileUtils.mkdir_p(File.dirname(target))
    File.binwrite(target, Base64.strict_decode64(encoded))
  end
  UI.messagebox("JGRIT 설치가 완료되었습니다. SketchUp을 다시 시작한 뒤 도구 모음을 켜세요.")
rescue StandardError => error
  UI.messagebox("JGRIT 설치 실패: #{error.message}")
end
