จากการทดลองทำไพ่หนึ่งใบให้ขยับและเล่นได้
ค่อย ๆ กลายเป็นเครื่องมือที่ช่วยให้ศิลปินนำเดคของตัวเองมาแสดง ทดลอง และต่อยอดเป็นรายได้
ไพ่ใบแรก: จากภาพนิ่งสู่สำรับที่เล่นได้
ไพ่หนึ่งสำรับอาจเริ่มจากภาพวาดหลายสิบภาพ แต่เมื่อวาดเสร็จแล้ว งานเหล่านั้นมักถูกนำเสนอได้เพียงไม่กี่รูปแบบ เช่น พิมพ์ออกมาเป็นสำรับจริง วางขายเป็นสินค้า หรือโพสต์ภาพนิ่งลงบนโซเชียลมีเดีย
ผมจึงเริ่มตั้งคำถามว่า
ถ้าไพ่ที่วาดไว้สามารถขยับ พลิก และให้คนลองเปิดได้บนหน้าจอ ความรู้สึกที่มีต่องานชุดนั้นจะเปลี่ยนไปหรือไม่
นี่คือจุดเริ่มต้นของการทดลองทำไพ่ใบแรกให้มีชีวิตขึ้นมาบนหน้าจอ
ปัญหาที่เห็น
ศิลปินสามารถใช้เวลาหลายเดือนในการออกแบบไพ่หนึ่งสำรับ แต่เมื่อผลงานเสร็จ วิธีนำเสนอส่วนใหญ่มักจบลงที่ภาพปก กล่องสินค้า และภาพตัวอย่างไม่กี่ใบ
คนที่เห็นผลงานยังไม่ได้สัมผัสประสบการณ์ของการ “จับไพ่” จริง ๆ
เมื่ออยู่บนเว็บไซต์หรือโซเชียลมีเดีย ไพ่จึงกลายเป็นเพียงภาพนิ่ง ผู้ชมเลื่อนผ่าน ดูว่าสวยหรือไม่ แล้วก็ออกไป ทั้งที่เสน่ห์ของไพ่ไม่ได้อยู่แค่ภาพวาด แต่อยู่ที่ช่วงเวลาของการเลือก การเปิด และการรออ่านข้อความที่อยู่หลังไพ่ด้วย
หากศิลปินต้องการทำให้ไพ่เล่นได้บนเว็บไซต์ ก็อาจต้องจ้างนักพัฒนา ทำระบบหลังบ้าน เช่าเซิร์ฟเวอร์ และดูแลรายละเอียดทางเทคนิคอีกหลายอย่าง สิ่งเหล่านี้กลายเป็นกำแพงระหว่างงานศิลปะกับผู้ชม
ไอเดียเริ่มต้น
ผมไม่ได้เริ่มจากการสร้างแพลตฟอร์มขนาดใหญ่ แต่เริ่มจากคำถามง่ายที่สุดก่อนว่า
เราทำให้คนเลือกไพ่หนึ่งใบ แล้วเปิดดูผลบนหน้าจอได้หรือไม่
เดโมแรกจึงมีหน้าที่เพียงอย่างเดียว คือให้ผู้เล่นกดเลือกไพ่ พลิกไพ่ และอ่านข้อความสั้น ๆ
ยังไม่มีระบบสมาชิก ไม่มีระบบรับเงิน ไม่มี AI และไม่มีการบันทึกผล ทุกอย่างถูกตัดออกเพื่อทดสอบเพียงเรื่องเดียวว่า เมื่อภาพไพ่สามารถตอบสนองต่อการกระทำของผู้ชมได้ งานจะรู้สึกมีชีวิตขึ้นมาหรือไม่
เดโมเล็ก ๆ นี้เป็นเหมือนต้นแบบที่ใช้ตอบคำถาม ก่อนจะตัดสินใจพัฒนาสิ่งที่ใหญ่กว่า
เครื่องมือที่ใช้
เดโมแรกสร้างขึ้นด้วยเครื่องมือพื้นฐานของเว็บไซต์ ได้แก่
- HTML สำหรับวางโครงสร้างของหน้าและข้อมูลไพ่
- CSS สำหรับออกแบบหน้าตา การจัดวาง และการเคลื่อนไหวของไพ่
- JavaScript สำหรับสุ่มไพ่ เปิดไพ่ และแสดงผลเมื่อผู้เล่นกด
- ภาพไพ่ดิจิทัล ซึ่งทำหน้าที่เป็นหัวใจของประสบการณ์ทั้งหมด
แนวคิดสำคัญคือทำให้เดโมสามารถเปิดจากเว็บเบราว์เซอร์ได้โดยตรง ไม่ต้องติดตั้งระบบที่ซับซ้อน และยังสามารถพัฒนาเป็นไฟล์ที่เจ้าของสำรับนำไปใช้ในเครื่องของตัวเองได้ในภายหลัง
สิ่งที่ทดลองและพบ
สิ่งแรกที่พบคือ การได้กดเลือกและเปิดไพ่ทำให้ผู้ชมรู้สึกมีส่วนร่วมกับงานมากกว่าการดูภาพนิ่ง แม้เดโมจะยังไม่มีระบบซับซ้อน แต่การเคลื่อนไหวและจังหวะก่อนเปิดไพ่ช่วยสร้างความรู้สึกบางอย่างขึ้นมาได้
สิ่งที่สองคือ คนที่ไม่ได้ตั้งใจซื้อสินค้าก็ยังอยากลองเล่นไพ่
นั่นทำให้ผมเห็นว่า “เดโมสำหรับคนทั่วไป” กับ “โปรแกรมสำหรับศิลปิน” ควรถูกแยกออกจากกัน
คนทั่วไปสามารถเข้ามาเล่น อ่านเรื่องราว แล้วไปดูบทความอื่นต่อได้ ส่วนศิลปินที่เห็นความเป็นไปได้ของงานตัวเอง สามารถเข้าไปดูรายละเอียดของโปรเจกต์และเลือกซื้อโปรแกรมไปปรับเป็นสำรับของตัวเองได้
สิ่งที่สามคือ เดโมหนึ่งใบไม่ได้เป็นเพียงตัวอย่างของเกม แต่มันเป็นหลักฐานว่า ภาพวาดหนึ่งชุดสามารถเปลี่ยนจากผลงานที่มีไว้ดู ให้กลายเป็นประสบการณ์ที่ผู้ชมมีส่วนร่วมได้
ลองเล่นเดโมแรก
เดโมด้านล่างเป็นต้นแบบรุ่นแรก มีเพียงการเลือกและเปิดไพ่เท่านั้น
ไม่มีระบบรับเงิน ไม่มีการบันทึกข้อมูล และยังไม่ใช่โปรแกรมฉบับที่นำไปติดตั้งใช้งาน เดโมนี้ถูกเก็บไว้เพื่อให้เห็นจุดเริ่มต้นของแนวคิด และเพื่อเปรียบเทียบกับสิ่งที่โปรเจกต์พัฒนาต่อมา
เครื่องมือสำหรับศิลปินทาโรต์
เดคของคุณ มีชีวิตบนหน้าจอ
อัปโหลดลายเส้นของคุณ ใส่ความหมายไพ่ แล้วลองเล่นเป็นผู้ใช้จริงดูว่าลูกค้าจะเห็นเดคของคุณยังไง
เริ่มต้นใช้งานยังไง
1) กรอกข้อมูลเดคในขั้นตอน “ตั้งค่าเดค” →
2) อัปโหลดรูปไพ่และความหมายในขั้นตอน “อัปโหลดไพ่” (หรือกด “โหลดข้อมูลตัวอย่าง” เพื่อดูตัวอย่างก่อน) →
3) ไปที่ “พรีวิวเป็นผู้เล่น” เพื่อลองเล่นเอง →
4) พร้อมใช้ที่บูธจริง กดปุ่มทอง “เริ่มโหมดหน้าบูธ” เพื่อล็อกหน้าจอให้ลูกค้าเล่นได้อย่างเดียว
ไพ่ทั้ง 22 ใบ
คลิกแต่ละใบเพื่ออัปโหลดรูปและใส่ความหมาย ระบบจะเช็คขนาดภาพให้อัตโนมัติ
อัปโหลดแล้ว 0 / 22 ใบ
ยังไม่มีรูปพร้อมใช้? กดปุ่มนี้เพื่อดึงชื่อไพ่และความหมายตัวอย่างมาใส่ให้ทันที (ไม่มีรูป) ไว้ลองระบบก่อน แล้วค่อยแก้ไขทีหลังได้
พรีวิวเป็นผู้เล่นจริง
นี่คือสิ่งที่ลูกค้าของศิลปินจะเห็นและใช้จ่ายเงินจริง
ZnVuY3Rpb24gdGFyb3RSZWFkeShmbil7CiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdsb2FkaW5nJyl7IGZuKCk7IH0KICBlbHNlIHsgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTsgfQp9CnRhcm90UmVhZHkoZnVuY3Rpb24oKXsKCiAgY29uc3QgREVNT19NRUFOSU5HUyA9IFsKICAgIHsgbmFtZTonVGhlIEZvb2wnLCB1cDon4LiB4Liy4Lij4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4Lir4Lih4LmI4LiU4LmJ4Lin4Lii4LmD4LiI4LmA4Lib4Li04LiU4LiB4Lin4LmJ4Liy4LiHJywgcmV2OifguILguLLguJTguIHguLLguKPguKfguLLguIfguYHguJzguJkg4Lir4Li44LiZ4Lir4Lix4LiZ4Lie4Lil4Lix4LiZ4LmB4Lil4LmI4LiZJyB9LAogICAgeyBuYW1lOidUaGUgTWFnaWNpYW4nLCB1cDon4Lih4Li14LiX4Lij4Lix4Lie4Lii4Liy4LiB4Lij4LiE4Lij4Lia4Lih4Li34LitIOC4nuC4o+C5ieC4reC4oeC4peC4h+C4oeC4t+C4reC4quC4o+C5ieC4suC4h+C4quC4o+C4o+C4hOC5jCcsIHJldjon4Lih4Li14LiC4Lit4LiH4LmB4LiV4LmI4LiC4Liy4LiU4LmC4Lif4LiB4Lix4LiqJyB9LAogICAgeyBuYW1lOidUaGUgSGlnaCBQcmllc3Rlc3MnLCB1cDon4Lif4Lix4LiH4Liq4Lix4LiN4LiK4Liy4LiV4LiN4Liy4LiT4LmB4Lil4Liw4LmA4Liq4Li14Lii4LiH4Lig4Liy4Lii4LmD4LiZJywgcmV2OifguJXguLHguJTguILguLLguJTguIjguLLguIHguYPguIjguJXguLHguKfguYDguK3guIcnIH0sCiAgICB7IG5hbWU6J1RoZSBFbXByZXNzJywgdXA6J+C4hOC4p+C4suC4oeC4reC4uOC4lOC4oeC4quC4oeC4muC4ueC4o+C4k+C5jOC5geC4peC4sOC4geC4suC4o+C5gOC4leC4tOC4muC5guC4lScsIHJldjon4Lil4Liw4LmA4Lil4Lii4LiV4Lix4Lin4LmA4Lit4LiH4Lir4Lij4Li34Lit4LiE4LiZ4Lij4Lit4Lia4LiC4LmJ4Liy4LiHJyB9LAogICAgeyBuYW1lOidUaGUgRW1wZXJvcicsIHVwOifguYLguITguKPguIfguKrguKPguYnguLLguIfguYHguKXguLDguITguKfguLLguKHguKHguLHguYjguJnguITguIcnLCByZXY6J+C5gOC4hOC4o+C5iOC4h+C4hOC4o+C4seC4lOC5gOC4geC4tOC4meC5hOC4m+C4iOC4meC4guC4suC4lOC4ouC4t+C4lOC4q+C4ouC4uOC5iOC4mScgfSwKICAgIHsgbmFtZTonVGhlIEhpZXJvcGhhbnQnLCB1cDon4Lii4Li24LiU4LiW4Li34Lit4LiE4Li44LiT4LiE4LmI4Liy4LmB4Lil4Liw4Lib4Lij4Liw4LmA4Lie4LiT4Li14Lij4LmI4Lin4LihJywgcmV2OifguKLguLbguJTguJXguLTguJTguIHguI7guIjguJnguYTguKHguYjguKLguK3guKHguYDguJvguKXguLXguYjguKLguJknIH0sCiAgICB7IG5hbWU6J1RoZSBMb3ZlcnMnLCB1cDon4LiB4Liy4Lij4LiV4Lix4LiU4Liq4Li04LiZ4LmD4LiI4LiE4Lij4Lix4LmJ4LiH4Liq4Liz4LiE4Lix4LiN4LiU4LmJ4Lin4Lii4LmD4LiIJywgcmV2OifguKXguLHguIfguYDguKXguYTguKHguYjguIHguKXguYnguLLguYDguKXguLfguK3guIEnIH0sCiAgICB7IG5hbWU6J1RoZSBDaGFyaW90JywgdXA6J+C4oeC4uOC5iOC4h+C4oeC4seC5iOC4meC4hOC4p+C4muC4hOC4uOC4oeC4quC4luC4suC4meC4geC4suC4o+C4k+C5jOC5hOC4m+C4guC5ieC4suC4h+C4q+C4meC5ieC4sicsIHJldjon4LmA4Lij4LmI4LiH4Lij4Li14Lia4LiI4LiZ4LiC4Liy4LiU4LiB4Liy4Lij4LiE4Lin4Lia4LiE4Li44LihJyB9LAogICAgeyBuYW1lOidTdHJlbmd0aCcsIHVwOifguITguKfguLLguKHguIHguKXguYnguLLguKvguLLguI3guJfguLXguYjguK3guYjguK3guJnguYLguKLguJnguIjguLLguIHguKDguLLguKLguYPguJknLCByZXY6J+C4guC4suC4lOC4hOC4p+C4suC4oeC4oeC4seC5iOC4meC5g+C4iOC5g+C4meC4leC4seC4p+C5gOC4reC4hycgfSwKICAgIHsgbmFtZTonVGhlIEhlcm1pdCcsIHVwOifguJbguK3guKLguKHguLLguITguYnguJnguKvguLLguJvguLHguI3guI3guLLguKDguLLguKLguYPguJknLCByZXY6J+C5guC4lOC4lOC5gOC4lOC4teC5iOC4ouC4p+C4iOC4meC4leC4seC4lOC4guC4suC4lOC4iOC4suC4geC5guC4peC4gScgfSwKICAgIHsgbmFtZTonV2hlZWwgb2YgRm9ydHVuZScsIHVwOifguIjguLHguIfguKvguKfguLDguIrguLXguKfguLTguJXguKvguKHguLjguJnguYDguKfguLXguKLguJkg4LmA4Lib4Li04LiU4Lij4Lix4Lia4LmC4Lit4LiB4Liy4Liq4LmD4Lir4Lih4LmIJywgcmV2OifguIHguKXguLHguKfguITguKfguLLguKHguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnIH0sCiAgICB7IG5hbWU6J0p1c3RpY2UnLCB1cDon4LiE4Lin4Liy4Lih4LmA4Lib4LmH4LiZ4LiY4Lij4Lij4Lih4LmB4Lil4Liw4Lic4Lil4LiI4Liy4LiB4LiB4Liy4Lij4LiB4Lij4Liw4LiX4LizJywgcmV2OifguKHguK3guIfguYTguKHguYjguYDguKvguYfguJnguITguKfguLLguKHguIjguKPguLTguIfguJXguLLguKHguJfguLXguYjguYDguJvguYfguJknIH0sCiAgICB7IG5hbWU6J1RoZSBIYW5nZWQgTWFuJywgdXA6J+C4q+C4ouC4uOC4lOC4nuC4seC4geC5gOC4nuC4t+C5iOC4reC4oeC4reC4h+C4oeC4uOC4oeC5g+C4q+C4oeC5iCcsIHJldjon4LiV4Li04LiU4Lit4Lii4Li54LmI4LiB4Lix4Lia4LiE4Lin4Liy4Lih4LmE4Lih4LmI4LiB4LmJ4Liy4Lin4Lir4LiZ4LmJ4LiyJyB9LAogICAgeyBuYW1lOidEZWF0aCcsIHVwOifguJvguKXguYjguK3guKLguKrguLTguYjguIfguYDguIHguYjguLLguYDguJ7guLfguYjguK3guYDguKPguLTguYjguKHguKrguLTguYjguIfguYPguKvguKHguYgnLCByZXY6J+C4geC4peC4seC4p+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC4nOC5iOC4suC4mSDguKLguLbguJTguJXguLTguJTguK3guJTguLXguJUnIH0sCiAgICB7IG5hbWU6J1RlbXBlcmFuY2UnLCB1cDon4LiE4Lin4Liy4Lih4Liq4Lih4LiU4Li44Lil4LmB4Lil4Liw4LiB4Liy4Lij4Lic4Liq4Lih4Lic4Liq4Liy4LiZJywgcmV2OifguIrguLXguKfguLTguJXguILguLLguJTguITguKfguLLguKHguKXguIfguJXguLHguKcnIH0sCiAgICB7IG5hbWU6J1RoZSBEZXZpbCcsIHVwOifguJXguKPguLDguKvguJnguLHguIHguJbguLbguIfguJ7guLHguJnguJjguJnguLLguIHguLLguKPguJfguLXguYjguJzguLnguIHguJXguLHguKfguYDguK3guIcnLCByZXY6J+C4luC4ueC4geC4hOC4o+C4reC4muC4h+C4s+C4lOC5ieC4p+C4ouC4meC4tOC4quC4seC4ouC5gOC4lOC4tOC4oScgfSwKICAgIHsgbmFtZTonVGhlIFRvd2VyJywgdXA6J+C4geC4suC4o+C4quC4seC5iOC4meC4quC4sOC5gOC4l+C4t+C4reC4meC4l+C4teC5iOC4meC4s+C5hOC4m+C4quC4ueC5iOC5guC4hOC4o+C4h+C4quC4o+C5ieC4suC4h+C5g+C4q+C4oeC5iOC4l+C4teC5iOC5geC4guC5h+C4h+C5geC4o+C4h+C4geC4p+C5iOC4sicsIHJldjon4LmA4Lil4Li14LmI4Lii4LiH4LmA4Lic4LiK4Li04LiN4Lin4Li04LiB4Lik4LiV4LiI4LiZ4Liq4Liw4Liq4Lih4Lib4Lix4LiN4Lir4LiyJyB9LAogICAgeyBuYW1lOidUaGUgU3RhcicsIHVwOifguITguKfguLLguKHguKvguKfguLHguIfguYHguKXguLDguYHguKPguIfguJrguLHguJnguJTguLLguKXguYPguIgnLCByZXY6J+C4quC4tOC5ieC4meC4q+C4p+C4seC4hyDguKHguK3guIfguYTguKHguYjguYDguKvguYfguJnguYHguKrguIfguKrguKfguYjguLLguIcnIH0sCiAgICB7IG5hbWU6J1RoZSBNb29uJywgdXA6J+C4quC4seC4jeC4iuC4suC4leC4jeC4suC4k+C4l+C4teC5iOC4leC5ieC4reC4h+C4leC4teC4hOC4p+C4suC4oeC4reC4ouC5iOC4suC4h+C4o+C4sOC4p+C4seC4hycsIHJldjon4Liq4Lix4Lia4Liq4LiZ4Lir4Lil4Li44LiU4LiI4Liy4LiB4LiE4Lin4Liy4Lih4LmA4Lib4LmH4LiZ4LiI4Lij4Li04LiHJyB9LAogICAgeyBuYW1lOidUaGUgU3VuJywgdXA6J+C4hOC4p+C4suC4oeC4quC4lOC5g+C4quC5geC4peC4sOC4hOC4p+C4suC4oeC4quC4s+C5gOC4o+C5h+C4iCcsIHJldjon4LiC4Liy4LiU4Lie4Lil4Lix4LiH4LiK4Li14Lin4Li04LiVIOC4q+C4oeC4lOC5hOC4nycgfSwKICAgIHsgbmFtZTonSnVkZ2VtZW50JywgdXA6J+C4geC4suC4o+C4m+C4peC4uOC4geC4quC4s+C4meC4tuC4geC5geC4peC4sOC4m+C4o+C4sOC5gOC4oeC4tOC4meC4leC4meC5gOC4reC4h+C5g+C4q+C4oeC5iCcsIHJldjon4Lib4LiP4Li04LmA4Liq4LiY4LiB4Liy4Lij4LmA4Lij4Li14Lii4LiB4Lij4LmJ4Lit4LiH4LmD4Lir4LmJ4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJyB9LAogICAgeyBuYW1lOidUaGUgV29ybGQnLCB1cDon4LiE4Lin4Liy4Lih4Liq4Lih4Lia4Li54Lij4LiT4LmM4LmB4Lil4Liw4LiB4Liy4Lij4Lia4Lij4Lij4Lil4Li44LmA4Lib4LmJ4Liy4Lir4Lih4Liy4LiiJywgcmV2OifguKPguLnguYnguKrguLbguIHguILguLLguJTguK3guLDguYTguKPguJrguLLguIfguK3guKLguYjguLLguIfguK3guKLguLnguYjguYDguKrguKHguK0nIH0KICBdOwoKICBsZXQgY2FyZERhdGEgPSBBcnJheS5mcm9tKHtsZW5ndGg6MjJ9LCAoKSA9PiAoeyBuYW1lOicnLCBpbWc6JycsIHVwOicnLCByZXY6JycgfSkpOwogIGxldCBlZGl0aW5nSW5kZXggPSBudWxsOwogIGxldCBjYXJkUmF0aW9XID0gMiwgY2FyZFJhdGlvSCA9IDM7CiAgbGV0IGRlY2tCYWNrSW1hZ2UgPSAnJzsKCiAgY29uc3QgZWwgPSBpZCA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CgogIGZ1bmN0aW9uIGFwcGx5Q2FyZFJhdGlvKCl7CiAgICBjYXJkUmF0aW9XID0gcGFyc2VGbG9hdChlbCgnY2FyZFJhdGlvVycpLnZhbHVlKSB8fCAyOwogICAgY2FyZFJhdGlvSCA9IHBhcnNlRmxvYXQoZWwoJ2NhcmRSYXRpb0gnKS52YWx1ZSkgfHwgMzsKICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2FyZC1yYXRpbycsIGNhcmRSYXRpb1cgKyAnIC8gJyArIGNhcmRSYXRpb0gpOwogICAgY29uc3QgYmFzZVdpZHRoID0gOTY7CiAgICBlbCgnZGVjay1hcmVhJykuc3R5bGUuaGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlV2lkdGggKiAoY2FyZFJhdGlvSCAvIGNhcmRSYXRpb1cpKSArIDI0ICsgJ3B4JzsKICB9CiAgZWwoJ2NhcmRSYXRpb1cnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7IGFwcGx5Q2FyZFJhdGlvKCk7IHNhdmVNZXRhKCk7IH0pOwogIGVsKCdjYXJkUmF0aW9IJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4geyBhcHBseUNhcmRSYXRpbygpOyBzYXZlTWV0YSgpOyB9KTsKCiAgZnVuY3Rpb24gYXBwbHlEZWNrQmFjaygpewogICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kZWNrLWJhY2staW1hZ2UnLCBkZWNrQmFja0ltYWdlID8gYHVybCgnJHtkZWNrQmFja0ltYWdlfScpYCA6ICdub25lJyk7CiAgICBlbCgndGFyb3RBcHBTY29wZScpLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1iYWNrLWltYWdlJywgISFkZWNrQmFja0ltYWdlKTsKICB9CiAgZWwoJ2JhY2tJbWFnZURyb3B6b25lJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbCgnYmFja0ltYWdlSW5wdXQnKS5jbGljaygpKTsKICBlbCgnYmFja0ltYWdlSW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsKICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsKICAgIGlmICghZmlsZSkgcmV0dXJuOwogICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgIHJlYWRlci5vbmxvYWQgPSBldiA9PiB7CiAgICAgIGRlY2tCYWNrSW1hZ2UgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBjb25zdCBkeiA9IGVsKCdiYWNrSW1hZ2VEcm9wem9uZScpOwogICAgICBkei5jbGFzc05hbWUgPSAnZHJvcHpvbmUgaGFzLWltYWdlJzsKICAgICAgZHouaW5uZXJIVE1MID0gYDxpbWcgc3JjPSIke2RlY2tCYWNrSW1hZ2V9Ij5gOwogICAgICBhcHBseURlY2tCYWNrKCk7CiAgICB9OwogICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgfSk7CgogIGZ1bmN0aW9uIGFwcGx5VGhlbWUoKXsKICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuc3R5bGUuc2V0UHJvcGVydHkoJy0tZ3JhZC1hJywgZWwoJ3RoZW1lQ29sb3JBJykudmFsdWUpOwogICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmFkLWInLCBlbCgndGhlbWVDb2xvckInKS52YWx1ZSk7CiAgICBlbCgndGFyb3RBcHBTY29wZScpLnN0eWxlLnNldFByb3BlcnR5KCctLWdvbGQnLCBlbCgndGhlbWVDb2xvckdvbGQnKS52YWx1ZSk7CiAgfQogIFsndGhlbWVDb2xvckEnLCd0aGVtZUNvbG9yQicsJ3RoZW1lQ29sb3JHb2xkJ10uZm9yRWFjaChpZCA9PiB7CiAgICBlbChpZCkuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7IGFwcGx5VGhlbWUoKTsgc2F2ZU1ldGEoKTsgfSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0gc3RlcCBuYXZpZ2F0aW9uIC0tLS0tLS0tLS0gKi8KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1idG4nKS5mb3JFYWNoKGJ0biA9PiB7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBnb1RvU3RlcChidG4uZGF0YXNldC5zdGVwKSk7CiAgfSk7CiAgZnVuY3Rpb24gZ29Ub1N0ZXAobil7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1idG4nKS5mb3JFYWNoKGIgPT4gYi5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCBiLmRhdGFzZXQuc3RlcCA9PT0gU3RyaW5nKG4pKSk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1wYW5lbCcpLmZvckVhY2gocCA9PiBwLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIHAuaWQgPT09ICdwYW5lbC0nICsgbikpOwogICAgaWYgKG4gPT09ICc0JykgYnVpbGREZWNrUHJldmlldygpOwogIH0KCiAgLyogLS0tLS0tLS0tLSBzdG9yYWdlICh0ZXh0IGRhdGEgb25seSwgbm8gaW1hZ2VzKSAtLS0tLS0tLS0tCiAgICAgVXNlcyB3aW5kb3cuc3RvcmFnZSBpbnNpZGUgdGhlIENsYXVkZSBwcmV2aWV3OyBmYWxscyBiYWNrIHRvCiAgICAgbG9jYWxTdG9yYWdlIGF1dG9tYXRpY2FsbHkgb25jZSB0aGlzIGZpbGUgaXMgb3BlbmVkIGFzIGEgcmVhbAogICAgIHN0YW5kYWxvbmUgSFRNTCBmaWxlIG9uIGFuIGFydGlzdCdzIG93biBkZXZpY2UgKG5vIHNlcnZlciBuZWVkZWQpLiAqLwogIGNvbnN0IHN0b3JhZ2VBZGFwdGVyID0gewogICAgYXN5bmMgZ2V0KGtleSl7CiAgICAgIGlmICh3aW5kb3cuc3RvcmFnZSAmJiB0eXBlb2Ygd2luZG93LnN0b3JhZ2UuZ2V0ID09PSAnZnVuY3Rpb24nKXsKICAgICAgICB0cnkgeyByZXR1cm4gYXdhaXQgd2luZG93LnN0b3JhZ2UuZ2V0KGtleSwgZmFsc2UpOyB9IGNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfQogICAgICB9CiAgICAgIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiAhPT0gbnVsbCA/IHsgdmFsdWU6IHYgfSA6IG51bGw7IH0KICAgICAgY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICB9LAogICAgYXN5bmMgc2V0KGtleSwgdmFsdWUpewogICAgICBpZiAod2luZG93LnN0b3JhZ2UgJiYgdHlwZW9mIHdpbmRvdy5zdG9yYWdlLnNldCA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgdHJ5IHsgcmV0dXJuIGF3YWl0IHdpbmRvdy5zdG9yYWdlLnNldChrZXksIHZhbHVlLCBmYWxzZSk7IH0gY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICAgIH0KICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7IHJldHVybiB7IHZhbHVlIH07IH0gY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBzYXZlTWV0YSgpewogICAgdHJ5IHsKICAgICAgYXdhaXQgc3RvcmFnZUFkYXB0ZXIuc2V0KCdhcnRpc3QtZGVjay1tZXRhJywgSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGRlY2tOYW1lOiBlbCgnZGVja05hbWUnKS52YWx1ZSwgYXJ0aXN0TmFtZTogZWwoJ2FydGlzdE5hbWUnKS52YWx1ZSwgcHVyY2hhc2VMaW5rOiBlbCgncHVyY2hhc2VMaW5rJykudmFsdWUsCiAgICAgICAgY2FyZFJhdGlvVzogZWwoJ2NhcmRSYXRpb1cnKS52YWx1ZSwgY2FyZFJhdGlvSDogZWwoJ2NhcmRSYXRpb0gnKS52YWx1ZSwKICAgICAgICB0aGVtZUNvbG9yQTogZWwoJ3RoZW1lQ29sb3JBJykudmFsdWUsIHRoZW1lQ29sb3JCOiBlbCgndGhlbWVDb2xvckInKS52YWx1ZSwgdGhlbWVDb2xvckdvbGQ6IGVsKCd0aGVtZUNvbG9yR29sZCcpLnZhbHVlCiAgICAgIH0pKTsKICAgICAgYXdhaXQgc3RvcmFnZUFkYXB0ZXIuc2V0KCdhcnRpc3QtY2FyZC10ZXh0JywgSlNPTi5zdHJpbmdpZnkoCiAgICAgICAgY2FyZERhdGEubWFwKGMgPT4gKHsgbmFtZTpjLm5hbWUsIHVwOmMudXAsIHJldjpjLnJldiwgaW1nOiBjLmltZyAmJiBjLmltZy5zdGFydHNXaXRoKCdodHRwJykgPyBjLmltZyA6ICcnIH0pKQogICAgICApKTsKICAgIH0gY2F0Y2goZSl7IC8qIG5vbi1mYXRhbCBmb3IgYSBkZW1vICovIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gbG9hZE1ldGEoKXsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCBzdG9yYWdlQWRhcHRlci5nZXQoJ2FydGlzdC1kZWNrLW1ldGEnKTsKICAgICAgaWYgKG1ldGEgJiYgbWV0YS52YWx1ZSl7CiAgICAgICAgY29uc3QgbSA9IEpTT04ucGFyc2UobWV0YS52YWx1ZSk7CiAgICAgICAgZWwoJ2RlY2tOYW1lJykudmFsdWUgPSBtLmRlY2tOYW1lIHx8ICcnOwogICAgICAgIGVsKCdhcnRpc3ROYW1lJykudmFsdWUgPSBtLmFydGlzdE5hbWUgfHwgJyc7CiAgICAgICAgZWwoJ3B1cmNoYXNlTGluaycpLnZhbHVlID0gbS5wdXJjaGFzZUxpbmsgfHwgJyc7CiAgICAgICAgZWwoJ2NhcmRSYXRpb1cnKS52YWx1ZSA9IG0uY2FyZFJhdGlvVyB8fCAyOwogICAgICAgIGVsKCdjYXJkUmF0aW9IJykudmFsdWUgPSBtLmNhcmRSYXRpb0ggfHwgMzsKICAgICAgICBlbCgndGhlbWVDb2xvckEnKS52YWx1ZSA9IG0udGhlbWVDb2xvckEgfHwgJyMzM2U2YzQnOwogICAgICAgIGVsKCd0aGVtZUNvbG9yQicpLnZhbHVlID0gbS50aGVtZUNvbG9yQiB8fCAnIzhiNWNmNic7CiAgICAgICAgZWwoJ3RoZW1lQ29sb3JHb2xkJykudmFsdWUgPSBtLnRoZW1lQ29sb3JHb2xkIHx8ICcjZjJjMTRlJzsKICAgICAgfQogICAgfSBjYXRjaChlKXt9CiAgICBhcHBseUNhcmRSYXRpbygpOwogICAgYXBwbHlUaGVtZSgpOwogICAgYXBwbHlEZWNrQmFjaygpOwogICAgdHJ5IHsKICAgICAgY29uc3QgY2FyZFRleHQgPSBhd2FpdCBzdG9yYWdlQWRhcHRlci5nZXQoJ2FydGlzdC1jYXJkLXRleHQnKTsKICAgICAgaWYgKGNhcmRUZXh0ICYmIGNhcmRUZXh0LnZhbHVlKXsKICAgICAgICBjb25zdCBhcnIgPSBKU09OLnBhcnNlKGNhcmRUZXh0LnZhbHVlKTsKICAgICAgICBhcnIuZm9yRWFjaCgoYyxpKSA9PiB7IGlmIChjYXJkRGF0YVtpXSl7IGNhcmREYXRhW2ldLm5hbWUgPSBjLm5hbWU7IGNhcmREYXRhW2ldLnVwID0gYy51cDsgY2FyZERhdGFbaV0ucmV2ID0gYy5yZXY7IGlmIChjLmltZykgY2FyZERhdGFbaV0uaW1nID0gYy5pbWc7IH0gfSk7CiAgICAgIH0KICAgIH0gY2F0Y2goZSl7fQogICAgcmVuZGVyQ2FyZExpc3QoKTsKICB9CiAgWydkZWNrTmFtZScsJ2FydGlzdE5hbWUnLCdwdXJjaGFzZUxpbmsnXS5mb3JFYWNoKGlkID0+IGVsKGlkKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzYXZlTWV0YSkpOwoKICBjb25zdCBFWElTVElOR19ERUNLID0gWwogICAgeyBuYW1lOidUaGUgU2Nyb2xsLUxvc3QgRm9vbCAo4LiZ4Lix4LiB4LmA4LiU4Li04LiZ4LiX4Liy4LiH4LiW4Li34LitIEdvb2dsZSBNYXBzIOC4l+C4teC5iOC4q+C4suC4ouC4quC4seC4jeC4jeC4suC4kyknLCBpbWc6J2h0dHBzOi8vd3d3LmV2YXRhcmludGVybWVkaWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA2LzAtNjgzeDEwMjQucG5nJywgdXA6J+C4geC4suC4o+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4q+C4oeC5iCDguJTguYnguKfguKLguITguKfguLLguKHguYTguKPguYnguYDguJTguLXguKLguIfguKrguLLguYHguKXguLDguIHguKXguYnguLLguKvguLLguI0g4LmB4Lih4LmJ4Lii4Lix4LiH4LmE4Lih4LmI4Lij4Li54LmJ4Lir4LiZ4LiX4Liy4LiH4LiK4Lix4LiU4LmA4LiI4LiZIOC5geC4leC5iOC4nuC4o+C5ieC4reC4oeC4geC5ieC4suC4p+C5gOC4lOC4tOC4meC4lOC5ieC4p+C4ouC5g+C4iOC5gOC4m+C4tOC4lOC4geC4p+C5ieC4suC4hycsIHJldjon4LmC4LiH4LmI4LmA4LiC4Lil4LiyIOC5hOC4o+C5ieC4geC4suC4o+C4p+C4suC4h+C5geC4nOC4mSDguILguLLguJTguKrguJXguLQg4Lij4Liw4Lin4Lix4LiH4LiB4Liy4Lij4LiB4Lij4Liw4LmC4LiU4LiU4Lil4LiH4LmE4Lib4LmC4LiU4Lii4LmE4Lih4LmI4LiU4Li54Liq4LiW4Liy4LiZ4LiB4Liy4Lij4LiT4LmMJyB9LAogICAgeyBuYW1lOidUaGUgTWFnaWNpYW4gb2YgQXBwcyAo4Lic4Li54LmJ4Lin4Li04LmA4Lio4Lip4LmA4Lib4Li04LiU4LmB4Lit4Lib4Lie4Lij4LmJ4Lit4Lih4LiB4Lix4LiZIDcg4LmB4Lit4LibKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMS02ODN4MTAyNC5wbmcnLCB1cDon4LiX4Lij4Lix4Lie4Lii4Liy4LiB4Lij4LiE4Lij4Lia4Lih4Li34LitIOC5g+C4iuC5ieC4l+C4seC4geC4qeC4sCDguYDguJfguITguYLguJnguYLguKXguKLguLUg4LmB4Lil4Liw4LmA4LiI4LiV4LiI4Liz4LiZ4LiH4LmD4LiZ4LiB4Liy4Lij4Liq4Lij4LmJ4Liy4LiH4Liq4Lij4Lij4LiE4LmMIOC5gOC4m+C4peC4teC5iOC4ouC4meC5hOC4reC5gOC4lOC4teC4ouC5g+C4q+C5ieC5gOC4m+C5h+C4meC4nOC4pScsIHJldjon4Lie4Lij4Liq4Lin4Lij4Lij4LiE4LmM4Lil4LmJ4LiZIOC5geC4leC5iOC4guC4suC4lOC5guC4n+C4geC4seC4qiDguYPguIrguYnguJ7guKXguLHguIfguYDguIHguLTguJnguJXguLHguKcg4LiI4Lix4LiU4LiB4Liy4Lij4LiX4Lij4Lix4Lie4Lii4Liy4LiB4Lij4Lic4Li04LiU4Lie4Lil4Liy4LiUJyB9LAogICAgeyBuYW1lOidUaGUgU2lsZW50IFNlZXIgKOC4meC4seC4geC4nuC4ouC4suC4geC4o+C4k+C5jOC4luC4t+C4reC4q+C4ueC4n+C4seC4hyBub2lzZS1jYW5jZWwpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8yLTY4M3gxMDI0LnBuZycsIHVwOifguJ7guKXguLHguIfguKrguLHguI3guIrguLLguJXguI3guLLguJPguYHguKXguLDguITguKfguLLguKHguKXguLbguIHguKXguLHguJog4LiB4Liy4Lij4Liq4Liz4Lij4Lin4Lih4LiI4Li04LiV4Lif4Lix4LiH4LmA4Liq4Li14Lii4LiH4Lig4Liy4Lii4LmD4LiZ4Lih4Liy4LiB4LiB4Lin4LmI4Liy4Lig4Liy4Lii4LiZ4Lit4LiBJywgcmV2OifguJbguLnguIHguIHguLHguYnguJnguYDguKrguLXguKLguIfguKDguLLguKLguYPguJkg4LiI4Li04LiV4LmD4LiI4Lif4Li44LmJ4LiH4LiL4LmI4Liy4LiZIOC5hOC4oeC5iOC5gOC4iuC4t+C5iOC4reC4quC4seC4jeC4iuC4suC4leC4jeC4suC4kyDguIHguKXguLHguKfguYPguIjguJXguLHguKfguYDguK3guIcnIH0sCiAgICB7IG5hbWU6J1RoZSBFbXByZXNzIG9mIEZlZWRzICjguIjguLHguIHguKPguJ7guKPguKPguJTguLTguJnguLXguYHguKvguYjguIcgSW5zdGFncmFtIFN0b3J5KScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMy02ODN4MTAyNC5wbmcnLCB1cDon4LiE4Lin4Liy4Lih4Lit4Li44LiU4Lih4Liq4Lih4Lia4Li54Lij4LiT4LmMIOC4hOC4p+C4suC4oeC4hOC4tOC4lOC4quC4o+C5ieC4suC4h+C4quC4o+C4o+C4hOC5jCDguYHguKXguLDguIHguLLguKPguYDguKXguLXguYnguKLguIfguJTguLnguYDguKrguKHguLfguK3guJnguYHguKHguYgg4LmA4Lir4Lih4Liy4Liw4LiB4Lix4Lia4LiB4Liy4Lij4Lib4Lil4Li54LiB4Lid4Lix4LiH4LiE4Lin4Liy4Lih4LiH4Lit4LiB4LiH4Liy4LihJywgcmV2OifguKrguKPguYnguLLguIfguKDguLLguJ7guKHguLLguIHguYDguIHguLTguJnguYTguJsg4LiV4Li04LiU4LmC4LiL4LmA4LiK4Li14Lii4Lil4LiI4LiZ4Lil4Liw4LmA4Lil4Lii4LiE4Lin4Liy4Lih4LmA4Lib4LmH4LiZ4LiI4Lij4Li04LiHIOC4guC4suC4lOC4hOC4p+C4suC4oeC4reC5iOC4reC4meC5guC4ouC4mScgfSwKICAgIHsgbmFtZTonVGhlIEFsZ29yaXRobSBFbXBlcm9yICjguJzguLnguYnguJvguIHguITguKPguK3guIfguJTguYnguKfguKLguIHguLLguKPguITguKfguJrguITguLjguKHguK3guLHguKXguIHguK3guKPguLTguJfguLbguKEpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi80LTY4M3gxMDI0LnBuZycsIHVwOifguK3guLPguJnguLLguIgg4Lia4Lij4Lij4LiX4Lix4LiU4LiQ4Liy4LiZIOC5geC4peC4sOC5guC4hOC4o+C4h+C4quC4o+C5ieC4suC4h+C4l+C4teC5iOC4iuC4seC4lOC5gOC4iOC4mSDguITguKfguJrguITguLjguKHguKrguJbguLLguJnguIHguLLguKPguJPguYzguJTguYnguKfguKLguYDguKvguJXguLjguJzguKXguYHguKXguLDguIHguI7guYDguIHguJPguJHguYwnLCByZXY6J+C4ouC4tuC4lOC4leC4tOC4lOC4geC4juC4iOC4meC4guC4suC4lOC4hOC4p+C4suC4oeC4ouC4t+C4lOC4q+C4ouC4uOC5iOC4mSDguJvguIHguITguKPguK3guIfguITguJnguKHguLLguIHguYDguIHguLTguJnguJ7guK3guJTguLUg4LmA4LiE4Lij4LmI4LiH4LiE4Lij4Lix4LiU4LmA4LiB4Li04LiZ4LiE4Lin4LijJyB9LAogICAgeyBuYW1lOidUaGUgTWVtZSBQb3BlICjguJnguLHguIHguYDguJfguKjguJnguYzguKrguLLguKLguKHguLXguKEpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi81LTY4M3gxMDI0LnBuZycsIHVwOifguIHguLLguKPguKLguLbguJTguJXguLTguJTguYPguJkgIuC4hOC4p+C4suC4oeC5gOC4iuC4t+C5iOC4reC4o+C5iOC4p+C4oSIg4LiW4LmI4Liy4Lii4LiX4Lit4LiU4Lib4Lix4LiN4LiN4Liy4Lic4LmI4Liy4LiZ4Lih4Li44Lih4Lih4Lit4LiH4Liq4Lij4LmJ4Liy4LiH4Liq4Lij4Lij4LiE4LmMIOC4quC4o+C5ieC4suC4h+C4quC4seC4h+C4hOC4oeC4lOC5ieC4p+C4ouC4oeC4uOC4guC4leC4peC4gScsIHJldjon4Lii4Li24LiU4LiV4Li04LiU4Lih4Li44LiC4LiV4Lil4LiB4LiI4LiZ4LmE4Lih4LmI4LiI4Lij4Li04LiH4LmD4LiIIOC4quC4o+C5ieC4suC4h+C4hOC4p+C4suC4oeC5gOC4iuC4t+C5iOC4reC4nOC4tOC4lOC5hiDguJTguYnguKfguKLguKHguLXguKEg4LmD4LiK4LmJ4Lit4Liz4LiZ4Liy4LiIICLguJXguKXguIEiIOC5gOC4geC4tOC4meC4nuC4reC4lOC4tScgfSwKICAgIHsgbmFtZTonVGhlIENob2ljZSBQb3J0YWwgKOC4l+C4suC4h+C5geC4ouC4geC4l+C4teC5iOC4leC5ieC4reC4h+C5gOC4peC4t+C4reC4gSBTd2lwZSBMZWZ0IOC4q+C4o+C4t+C4rSBSaWdodCknLCBpbWc6J2h0dHBzOi8vd3d3LmV2YXRhcmludGVybWVkaWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA2LzYtNjgzeDEwMjQucG5nJywgdXA6J+C4geC4suC4o+C4leC4seC4lOC4quC4tOC4meC5g+C4iOC4hOC4o+C4seC5ieC4h+C4quC4s+C4hOC4seC4jSDguKPguLDguKvguKfguYjguLLguIfguJfguLLguIfguYDguKXguLfguK3guIHguJfguLXguYjguJXguYjguLLguIfguIHguLHguJkg4LiU4Li24LiH4LiU4Li54LiU4LmD4LiI4LiU4LmJ4Lin4Lii4LiE4Li44LiT4LiE4LmI4Liy4Lig4Liy4Lii4LmD4LiZJywgcmV2OifguKXguLHguIfguYDguKXguYDguKXguLfguK3guIHguYTguKHguYjguKrguLjguJTguJfguLLguIcg4Lir4LiZ4Li14Lib4Lix4LiN4Lir4Liy4LiB4Liy4Lij4LiV4Lix4LiU4Liq4Li04LiZ4LmD4LiIIOC4geC4peC4seC4p+C4nOC4tOC4lOC4q+C4p+C4seC4hycgfSwKICAgIHsgbmFtZTonVGhlIFNjb290ZXIgQ2hhcmlvdCAo4LiC4Li14LmI4Liq4LiB4Li54LmK4LiV4LmA4LiV4Lit4Lij4LmM4LmE4Lif4Lif4LmJ4Liy4LmA4LiC4LmJ4Liy4Liq4LiH4LiE4Lij4Liy4LihKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvNy02ODN4MTAyNC5wbmcnLCB1cDon4LiE4Lin4Liy4Lih4Lih4Li44LmI4LiH4Lih4Lix4LmI4LiZIOC5geC4peC4sOC4geC4suC4o+C4hOC4p+C4muC4hOC4uOC4oeC4nuC4peC4seC4h+C4quC4reC4h+C4guC4seC5ieC4p+C5g+C4q+C5ieC4geC5ieC4suC4p+C5hOC4m+C4guC5ieC4suC4h+C4q+C4meC5ieC4suC4reC4ouC5iOC4suC4h+C5gOC4lOC5h+C4lOC5gOC4lOC4teC5iOC4ouC4pycsIHJldjon4LiU4Lix4LiZ4LiX4Li44Lij4Lix4LiH4LmE4Lij4LmJ4LiB4Liy4Lij4LiE4Lin4Lia4LiE4Li44LihIOC4o+C4teC4muC4o+C5ieC4reC4meC4iOC4meC4nuC4seC4h+C4l+C4peC4suC4oiDguILguLLguJTguITguKfguLLguKHguJXguLHguYnguIfguYPguIjguIjguKPguLTguIcnIH0sCiAgICB7IG5hbWU6J1RoZSBJbm5lciBTdHJlbmd0aCAo4LiZ4Lix4LiB4Lij4Lia4LiI4Li04LiV4LmD4LiI4LiX4Li14LmI4Lid4Li24LiB4Liq4Lih4Liy4LiY4Li04Lic4LmI4Liy4LiZ4LmB4Lit4LibIENhbG0pJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi84LTY4M3gxMDI0LnBuZycsIHVwOifguITguKfguLLguKHguIHguKXguYnguLLguKvguLLguI3guIjguLLguIHguKDguLLguKLguYPguJkg4LiE4Lin4Liy4Lih4Lit4LmI4Lit4LiZ4LmC4Lii4LiZ4LiX4Li14LmI4Lic4LmI4Liy4LiZ4LiB4Liy4Lij4Lid4Li24LiB4Liq4LiV4Li04LmB4Lil4Liw4LiE4Lin4Liy4Lih4LmA4LiK4Li34LmI4Lit4Lih4Lix4LmI4LiZ4LmD4LiZ4LiV4LiZJywgcmV2OifguILguLLguJTguITguKfguLLguKHguKHguLHguYjguJnguYPguIgg4LiI4Li04LiV4LmD4LiI4Lit4LmI4Lit4LiZ4LmB4LitIOC5hOC4oeC5iOC4geC4peC5ieC4suC4o+C4seC4muC4oeC4t+C4reC4geC4seC4muC4hOC4p+C4suC4oeC4l+C5ieC4suC4l+C4suC4oicgfSwKICAgIHsgbmFtZTonVGhlIE9mZi1HcmlkIEhlcm1pdCAo4Lik4LmF4Lip4Li14LiX4Li14LmI4LmE4Lih4LmI4Lih4Li14LmE4Lin4LmE4Lif4LmB4LiV4LmI4LmA4LiC4LmJ4Liy4LmD4LiI4LmC4Lil4LiBKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvOS02ODN4MTAyNC5wbmcnLCB1cDon4LiB4Liy4Lij4LmB4Lii4LiB4LiV4Lix4Lin4LmA4Lie4Li34LmI4Lit4LiE4LmJ4LiZ4Lir4Liy4Lib4Lix4LiN4LiN4Liy4Lig4Liy4Lii4LmD4LiZIOC4nOC5iOC4suC4meC4geC4suC4o+C4l+C4reC4lOC4leC4seC4p+C4geC4seC4muC4hOC4p+C4suC4oeC5gOC4h+C4teC4ouC4muC4quC4h+C4seC4lCcsIHJldjon4LmC4LiU4LiU4LmA4LiU4Li14LmI4Lii4Lin4LmA4LiB4Li04LiZ4LmE4LibIOC5hOC4oeC5iOC4reC4ouC4suC4geC5gOC4guC5ieC4suC4quC4seC4h+C4hOC4oSDguIjguKHguK3guKLguLnguYjguIHguLHguJrguYLguKXguIHguKrguYjguKfguJnguJXguLHguKfguIjguJnguJTguLbguIfguJTguLnguJTguYPguITguKPguYTguKHguYjguYTguJTguYknIH0sCiAgICB7IG5hbWU6J1RoZSBVcGRhdGUgV2hlZWwgKOC4p+C4h+C4peC5ieC4reC5guC4iuC4hOC4iuC4sOC4leC4suC4l+C4teC5iOC4leC5ieC4reC4h+C4geC4lOC4ouC4reC4oeC4o+C4seC4miBUZXJtcyknLCBpbWc6J2h0dHBzOi8vd3d3LmV2YXRhcmludGVybWVkaWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA2LzEwLTY4M3gxMDI0LnBuZycsIHVwOifguIjguLHguIfguKvguKfguLDguIrguLXguKfguLTguJXguKvguKHguLjguJnguYDguKfguLXguKLguJnguILguLbguYnguJnigJPguKXguIcg4Lii4Lit4Lih4Lij4Lix4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmB4Lil4Liw4LmC4Lit4LiB4Liy4Liq4LmD4Lir4Lih4LmI4LmGJywgcmV2OifguIHguKXguLHguKfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcg4Lii4Li24LiU4LiV4Li04LiU4Lit4LiU4Li14LiVIOC5guC4reC4geC4suC4quC5g+C4q+C4oeC5iOC4q+C4peC4uOC4lOC4peC4reC4ouC5gOC4nuC4o+C4suC4sOC5hOC4oeC5iOC4ouC4reC4oSAi4Lit4Lix4Lie4LmA4LiU4LiVIicgfSwKICAgIHsgbmFtZTonVGhlIEp1ZGdtZW50IG9mIFNlbGZpZXMgKOC4geC4suC4o+C4leC4seC4lOC4quC4tOC4meC4nOC5iOC4suC4meC4oeC4uOC4oeC4geC4peC5ieC4reC4h+C5geC4peC4sOC4n+C4tOC4peC5gOC4leC4reC4o+C5jCknLCBpbWc6J2h0dHBzOi8vd3d3LmV2YXRhcmludGVybWVkaWEuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA2LzExLTY4M3gxMDI0LnBuZycsIHVwOifguITguKfguLLguKHguYDguJvguYfguJnguIHguKXguLLguIcg4LiE4Lin4Liy4Lih4Lii4Li44LiV4Li04LiY4Lij4Lij4Lih4LmD4LiZ4Lin4Li04LiY4Li14LiX4Li14LmI4Lih4Lit4LiH4LiV4Lix4Lin4LmA4Lit4LiHIOC5geC4peC4sOC4nOC4peC4l+C4teC5iOC4leC4suC4oeC4oeC4suC4iOC4suC4geC4geC4suC4o+C4geC4o+C4sOC4l+C4sycsIHJldjon4LiV4Lix4LiU4Liq4Li04LiZ4LiV4Lix4Lin4LmA4Lit4LiH4Lic4Li04LiU4LmGIOC5guC4lOC4meC4n+C4tOC4peC5gOC4leC4reC4o+C5jOC4q+C4peC4reC4gSDguKHguK3guIfguYTguKHguYjguYDguKvguYfguJnguITguLjguJPguITguYjguLLguJfguLXguYjguYHguJfguYnguIjguKPguLTguIcnIH0sCiAgICB7IG5hbWU6J1RoZSBQYXVzZWQgT25lICjguYHguILguKfguJnguK3guKLguLnguYjguIHguKXguLLguIfguK3guLLguIHguLLguKjguYDguJ7guKPguLLguLDguYHguJrguJXguKvguKHguJQpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8xMi02ODN4MTAyNC5wbmcnLCB1cDon4LiB4Liy4Lij4Lir4Lii4Li44LiU4LiK4Lix4LmI4Lin4LiE4Lij4Liy4Lin4LmA4Lie4Li34LmI4Lit4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lih4Li44Lih4Lih4Lit4LiHIOC4l+C5ieC4suC4l+C4suC4ouC4p+C4tOC4mOC4teC4hOC4tOC4lOC5gOC4lOC4tOC4oeC5hicsIHJldjon4LiV4Li04LiU4Lit4Lii4Li54LmI4LiB4Lix4Lia4LiE4Lin4Liy4Lih4LmE4Lih4LmI4LiB4LmJ4Liy4Lin4Lir4LiZ4LmJ4LiyIOC4geC4peC4seC4p+C5gOC4m+C4peC4teC5iOC4ouC4meC4oeC4uOC4oeC4oeC4reC4hyDguYTguKHguYjguKLguK3guKEgIuC4m+C4peC5iOC4reC4oiIg4Liq4Li04LmI4LiH4LmA4LiB4LmI4LiyJyB9LAogICAgeyBuYW1lOidUaGUgR3VhcmRpYW4gb2YgV2lsbCAo4Lic4Li54LmJ4Lie4Li04LiX4Lix4LiB4Lip4LmM4LmA4LiI4LiV4LiI4Liz4LiZ4LiHKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMTMtNjgzeDEwMjQucG5nJywgdXA6J+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC4nOC5iOC4suC4mSDguJvguKXguYjguK3guKLguKrguLTguYjguIfguYDguIHguYjguLLguYDguJ7guLfguYjguK3guYPguKvguYnguYDguIHguLTguJTguKrguLTguYjguIfguYPguKvguKHguYgg4Lin4Lix4LiP4LiI4Lix4LiB4Lij4LmB4Lir4LmI4LiH4LiB4Liy4Lij4Liq4Li04LmJ4LiZ4Liq4Li44LiU4LmB4Lil4Liw4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZJywgcmV2OifguIHguKXguLHguKfguIHguLLguKPguKrguLTguYnguJnguKrguLjguJQg4LmE4Lih4LmI4Lii4Lit4Lih4Lib4Lil4LmI4Lit4Lii4Lin4Liy4LiHIOC4ouC4tuC4lOC4leC4tOC4lOC5gOC4lOC4tOC4oeC4iOC4meC5hOC4oeC5iOC5gOC4geC4tOC4lOC5g+C4q+C4oeC5iCcgfSwKICAgIHsgbmFtZTonVGhlIEJhbGFuY2VyIG9mIFRhYnMgKOC4hOC4meC4iOC4seC4lOC4geC4suC4oyAyMyDguYHguJfguYfguJrguYPguJkgQ2hyb21lKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMTQtNjgzeDEwMjQucG5nJywgdXA6J+C4geC4suC4o+C4nOC4quC4oeC4nOC4quC4suC4meC4hOC4p+C4suC4oeC4q+C4peC4suC4geC4q+C4peC4suC4ouC4reC4ouC5iOC4suC4h+C4peC4h+C4leC4seC4pyDguKPguLHguIHguKnguLLguITguKfguLLguKHguKrguKHguJTguLjguKXguKPguLDguKvguKfguYjguLLguIfguKrguYjguKfguJnguJXguYjguLLguIfguYYnLCByZXY6J+C4iOC4seC4lOC4geC4suC4o+C4iuC4teC4p+C4tOC4leC5hOC4oeC5iOC4peC4h+C4leC4seC4pyDguIHguKPguLDguIjguLHguJTguIHguKPguLDguIjguLLguKIg4Lie4Lii4Liy4Lii4Liy4Lih4Lib4Lij4Liw4LiZ4Li14Lib4Lij4Liw4LiZ4Lit4Lih4LiI4LiZ4LiC4Liy4LiU4LiX4Li04Lio4LiX4Liy4LiHJyB9LAogICAgeyBuYW1lOidUaGUgS2VlcGVyIG9mIExpbWl0YXRpb25zICjguJzguLnguYnguJvguIHguJvguYnguK3guIfguIHguKPguK3guJrguYHguKvguYjguIfguYDguKfguKXguLLguYHguKXguLDguYHguJrguJXguYDguJXguK3guKPguLXguYgpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8xNS02ODN4MTAyNC5wbmcnLCB1cDon4LiB4Liy4Lij4Lii4Li24LiU4LiV4Li04LiU4LmD4LiZ4LiC4Lit4Lia4LmA4LiC4LiV4LmB4Lil4Liw4LiE4Lin4Liy4Lih4Lib4Lil4Lit4LiU4Lig4Lix4LiiIOC4iOC4meC4muC4suC4h+C4hOC4o+C4seC5ieC4h+C4geC4peC4suC4ouC5gOC4m+C5h+C4meC4geC4seC4muC4lOC4seC4geC4guC4reC4h+C4leC4seC4p+C5gOC4reC4hycsIHJldjon4LiW4Li54LiB4Lie4Lix4LiZ4LiY4LiZ4Liy4LiB4Liy4Lij4LiU4LmJ4Lin4Lii4LiZ4Li04Liq4Lix4Lii4LmA4LiU4Li04LihIOC4geC4peC4seC4p+C5gOC4quC4teC5iOC4ouC4hyDguIHguKXguYnguLLguYTguKHguYjguJ7guK3guJfguLXguYjguIjguLDguIHguYnguLLguKfguK3guK3guIHguKHguLInIH0sCiAgICB7IG5hbWU6J1RoZSBCcm9rZW4gVG93ZXIgU2lnbmFsICjguKvguK3guITguK3guKLguKrguLHguI3guI3guLLguJPguKXguYjguKEpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8xNi02ODN4MTAyNC5wbmcnLCB1cDon4LiB4Liy4Lij4Liq4Lix4LmI4LiZ4Liq4Liw4LmA4LiX4Li34Lit4LiZ4Lit4Lii4LmI4Liy4LiH4Lij4Li44LiZ4LmB4Lij4LiHIOC4m+C4peC4lOC4m+C4peC5iOC4reC4ouC5gOC4nuC4t+C5iOC4reC4quC4o+C5ieC4suC4h+C5guC4hOC4o+C4h+C4quC4o+C5ieC4suC4h+C5g+C4q+C4oeC5iOC4l+C4teC5iOC5geC4guC5h+C4h+C5geC4o+C4h+C4geC4p+C5iOC4sicsIHJldjon4LmA4Lil4Li14LmI4Lii4LiH4LmA4Lic4LiK4Li04LiN4Lin4Li04LiB4Lik4LiVIOC4iuC4sOC4peC4reC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyDguKPguLHguIHguKnguLIgIuC4q+C4reC4hOC4reC4oiIg4LiX4Li14LmI4LmB4LiX4LmJ4LiI4Lij4Li04LiH4LiI4LiZ4Lie4Lix4LiHJyB9LAogICAgeyBuYW1lOidUaGUgU3RyZWFtZXIgU3RhciAo4LiU4Liy4Lin4LmB4Lir4LmI4LiHIFRpa1RvayDguYHguKXguLDguITguKfguLLguKHguKvguKfguLHguIcpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8xNy02ODN4MTAyNC5wbmcnLCB1cDon4LmB4Liq4LiH4LmB4Lir4LmI4LiH4LmB4Lij4LiH4Lia4Lix4LiZ4LiU4Liy4Lil4LmD4LiIIOC4hOC4p+C4suC4oeC4q+C4p+C4seC4hyDguYHguKXguLDguIHguLLguKPguYDguIrguLfguYjguK3guKHguJXguYjguK3guIHguLHguJrguJ7guKXguLHguIfguKjguKPguLHguJfguJjguLInLCByZXY6J+C4quC4tOC5ieC4meC4q+C4p+C4seC4hyDguYTguKHguYjguYDguKvguYfguJnguYHguKPguIfguJrguLHguJnguJTguLLguKXguYPguIgg4LmE4Lif4LmD4LiZ4LmD4LiI4Lih4Lit4LiUIOC4lOC4seC4muC4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4rScgfSwKICAgIHsgbmFtZTonVGhlIFR3by1Nb29uIERvdWJ0ICjguITguKfguLLguKHguKXguLHguIfguYDguKXguKPguLDguKvguKfguYjguLLguIfguKrguK3guIcgTm90aWZpY2F0aW9uKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMTgtNjgzeDEwMjQucG5nJywgdXA6J+C4hOC4p+C4suC4oeC5hOC4oeC5iOC5geC4meC5iOC4meC4reC4mSDguKHguLLguKLguLLguITguJXguLQg4LmB4Lil4Liw4Liq4Lix4LiN4LiK4Liy4LiV4LiN4Liy4LiT4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiW4Lit4LiU4Lij4Lir4Lix4Liq4Lit4Lii4LmI4Liy4LiH4Lij4Liw4Lih4Lix4LiU4Lij4Liw4Lin4Lix4LiHJywgcmV2OifguKrguLHguJrguKrguJnguKvguJnguLHguIHguILguLbguYnguJkg4Lir4Lil4Li44LiU4LiI4Liy4LiB4Liq4Lix4LiN4LiK4Liy4LiV4LiN4Liy4LiTIOC4iOC4oeC4reC4ouC4ueC5iOC4geC4seC4muC4hOC4p+C4suC4oeC4geC4seC4h+C4p+C4pScgfSwKICAgIHsgbmFtZTonVGhlIElubmVyIFN1bmxpZ2h0ICjguJ7guKXguLHguIfguIrguLXguKfguLTguJXguIjguLLguIHguYHguJTguJTguYHguKXguLDguIHguLLguYHguJ8pJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8xOS02ODN4MTAyNC5wbmcnLCB1cDon4LiE4Lin4Liy4Lih4Liq4LiU4LmD4LiqIOC4hOC4p+C4suC4oeC4quC4s+C5gOC4o+C5h+C4iCDguYHguKXguLDguJ7guKXguLHguIfguIrguLXguKfguLTguJXguJfguLXguYjguKHguLLguYDguJXguLTguKHguYDguJXguYfguKHguIjguLTguJXguYPguIgnLCByZXY6J+C4guC4suC4lOC4nuC4peC4seC4h+C4iuC4teC4p+C4tOC4lSDguYDguKvguJnguLfguYjguK3guKLguKvguJnguYjguLLguKIg4Lir4Lih4LiU4LmE4LifIOC4peC4t+C4oeC4oeC4reC4h+C5geC4h+C5iOC4muC4p+C4gScgfSwKICAgIHsgbmFtZTonVGhlIFB1c2ggTm90aWZpY2F0aW9uICjguIHguLLguKPguJXguLfguYjguJnguILguLbguYnguJnguJTguYnguKfguKLguYDguKrguLXguKLguIfguYHguIjguYnguIfguYDguJXguLfguK3guJkpJywgaW1nOidodHRwczovL3d3dy5ldmF0YXJpbnRlcm1lZGlhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wNi8yMC02ODN4MTAyNC5wbmcnLCB1cDon4LiB4Liy4Lij4Lib4Lil4Li44LiB4Liq4Liz4LiZ4Li24LiBIOC4oOC4suC4o+C4geC4tOC4iOC5g+C4q+C4oeC5iCDguKvguKPguLfguK3guIHguLLguKPguYDguKPguLXguKLguIHguYPguKvguYnguJvguKPguLDguYDguKHguLTguJnguJXguJnguYDguK3guIfguK3guLXguIHguITguKPguLHguYnguIcnLCByZXY6J+C5hOC4oeC5iOC4n+C4seC4h+C5gOC4quC4teC4ouC4h+C5gOC4leC4t+C4reC4mSDguJvguI/guLTguYDguKrguJjguIHguLLguKPguYDguKPguLXguKLguIHguKrguJXguLQg4LiK4Liw4Lil4Lit4LiB4Liy4Lij4LiV4Lix4LiU4Liq4Li04LiZ4LmD4LiI4Liq4Liz4LiE4Lix4LiNJyB9LAogICAgeyBuYW1lOidUaGUgV2hvbGVuZXNzIExvb3AgKOC4p+C4h+C4iOC4o+C4l+C4teC5iOC4quC4oeC4muC4ueC4o+C4k+C5jOC4guC4reC4hyBvbmxpbmUtb2ZmbGluZSBsaWZlKScsIGltZzonaHR0cHM6Ly93d3cuZXZhdGFyaW50ZXJtZWRpYS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDYvMjEtNjgzeDEwMjQucG5nJywgdXA6J+C4hOC4p+C4suC4oeC4quC4oeC4muC4ueC4o+C4k+C5jOC4muC4ueC4o+C4k+C4suC4guC4reC4h+C5geC4leC5iOC4peC4sOC4muC4l+C4muC4suC4lyDguIHguLLguKPguJrguKPguKPguKXguLjguYDguJvguYnguLLguKvguKHguLLguKIg4LmB4Lil4Liw4LiB4Liy4Lij4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Lin4LiH4LiI4Lij4LmD4Lir4Lih4LmI4Lit4Lii4LmI4Liy4LiH4LiB4Lil4Lih4LiB4Lil4LmI4Lit4LihJywgcmV2OifguILguLLguJTguKrguKHguJTguLjguKXguKPguLDguKvguKfguYjguLLguIfguYLguKXguIHguK3guK3guJnguYTguKXguJnguYzigJPguK3guK3guJ/guYTguKXguJnguYwg4LiI4Lia4LmE4Lih4LmI4Liq4Lin4LiiIOC4o+C4ueC5ieC4quC4tuC4gSAi4LiC4Liy4LiUIiDguK3guLDguYTguKPguJrguLLguIfguK3guKLguYjguLLguIcnIH0KICBdOwoKICBlbCgnYnVsa1VwbG9hZEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZWwoJ2J1bGtGaWxlSW5wdXQnKS5jbGljaygpKTsKICBlbCgnYnVsa0ZpbGVJbnB1dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewogICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTsKICAgIGlmICghZmlsZXMubGVuZ3RoKSByZXR1cm47CiAgICBsZXQgbWF0Y2hlZCA9IDA7CiAgICBjb25zdCB1bm1hdGNoZWQgPSBbXTsKICAgIGxldCBwZW5kaW5nID0gZmlsZXMubGVuZ3RoOwoKICAgIGZ1bmN0aW9uIGZpbmlzaEJ1bGsoKXsKICAgICAgcmVuZGVyQ2FyZExpc3QoKTsKICAgICAgc2F2ZU1ldGEoKTsKICAgICAgbGV0IG1zZyA9IGDguJnguLPguYDguILguYnguLLguKrguLPguYDguKPguYfguIggJHttYXRjaGVkfSDguYPguJpgOwogICAgICBpZiAodW5tYXRjaGVkLmxlbmd0aCkgbXNnICs9IGAg4oCUIOC5hOC4oeC5iOC4nuC4muC5gOC4peC4guC5hOC4nuC5iOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h+C5g+C4meC4iuC4t+C5iOC4reC5hOC4n+C4peC5jCAke3VubWF0Y2hlZC5sZW5ndGh9IOC5hOC4n+C4peC5jDogJHt1bm1hdGNoZWQuam9pbignLCAnKX1gOwogICAgICBlbCgnYnVsa1Jlc3VsdE1zZycpLnRleHRDb250ZW50ID0gbXNnOwogICAgfQoKICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7CiAgICAgIGNvbnN0IG0gPSBmaWxlLm5hbWUubWF0Y2goLyhcZCspLyk7CiAgICAgIGNvbnN0IG4gPSBtID8gcGFyc2VJbnQobVsxXSwgMTApIDogbnVsbDsKICAgICAgaWYgKG4gPT09IG51bGwgfHwgbiA8IDAgfHwgbiA+IDIxKXsKICAgICAgICB1bm1hdGNoZWQucHVzaChmaWxlLm5hbWUpOwogICAgICAgIHBlbmRpbmctLTsKICAgICAgICBpZiAocGVuZGluZyA9PT0gMCkgZmluaXNoQnVsaygpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gZXYgPT4gewogICAgICAgIGNhcmREYXRhW25dLmltZyA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgICAgbWF0Y2hlZCsrOwogICAgICAgIHBlbmRpbmctLTsKICAgICAgICBpZiAocGVuZGluZyA9PT0gMCkgZmluaXNoQnVsaygpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgIH0pOwogICAgZWwoJ2J1bGtGaWxlSW5wdXQnKS52YWx1ZSA9ICcnOwogIH0pOwoKICBlbCgnZmlsbERlbW9CdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIERFTU9fTUVBTklOR1MuZm9yRWFjaCgoZCxpKSA9PiB7IGNhcmREYXRhW2ldLm5hbWUgPSBkLm5hbWU7IGNhcmREYXRhW2ldLnVwID0gZC51cDsgY2FyZERhdGFbaV0ucmV2ID0gZC5yZXY7IH0pOwogICAgcmVuZGVyQ2FyZExpc3QoKTsKICAgIHNhdmVNZXRhKCk7CiAgfSk7CgogIGVsKCdsb2FkRXhpc3RpbmdEZWNrQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBFWElTVElOR19ERUNLLmZvckVhY2goKGQsaSkgPT4geyBjYXJkRGF0YVtpXS5uYW1lID0gZC5uYW1lOyBjYXJkRGF0YVtpXS5pbWcgPSBkLmltZzsgY2FyZERhdGFbaV0udXAgPSBkLnVwOyBjYXJkRGF0YVtpXS5yZXYgPSBkLnJldjsgfSk7CiAgICBpZiAoIWVsKCdkZWNrTmFtZScpLnZhbHVlLnRyaW0oKSkgZWwoJ2RlY2tOYW1lJykudmFsdWUgPSAnVGhlIFRhcm90IENhcmRzIChDaGluYSBEaWdpdGFsIEVkaXRpb24pJzsKICAgIHJlbmRlckNhcmRMaXN0KCk7CiAgICBzYXZlTWV0YSgpOwogICAgYWxlcnQoJ+C5guC4q+C4peC4lOC5hOC4nuC5iOC4l+C4seC5ieC4hyAyMiDguYPguJrguYDguKPguLXguKLguJrguKPguYnguK3guKIgKOC5g+C4iuC5ieC4o+C4ueC4m+C4iOC4suC4gSBXb3JkUHJlc3Mg4LmA4LiU4Li04LihIOC5hOC4oeC5iOC4leC5ieC4reC4h+C4reC4seC4m+C5guC4q+C4peC4lOC5g+C4q+C4oeC5iCkg4LmE4Lib4LiU4Li54LiX4Li14LmI4LiC4Lix4LmJ4LiZ4LiV4Lit4LiZIDIg4LmA4Lie4Li34LmI4Lit4LiV4Lij4Lin4LiI4Liq4Lit4LiaIOC4q+C4o+C4t+C4reC4guC5ieC4suC4oeC5hOC4m+C4guC4seC5ieC4meC4leC4reC4mSAzIOC5hOC4lOC5ieC5gOC4peC4oicpOwogIH0pOwoKICAvKiAtLS0tLS0tLS0tIGNhcmQgbGlzdCAoc3RlcCAyKSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyQ2FyZExpc3QoKXsKICAgIGNvbnN0IGxpc3QgPSBlbCgnY2FyZC1saXN0Jyk7CiAgICBsaXN0LmlubmVySFRNTCA9ICcnOwogICAgbGV0IGRvbmVDb3VudCA9IDA7CiAgICBjYXJkRGF0YS5mb3JFYWNoKChjLGkpID0+IHsKICAgICAgY29uc3QgZG9uZSA9ICEhKGMuaW1nICYmIGMubmFtZSAmJiBjLnVwICYmIGMucmV2KTsKICAgICAgaWYgKGRvbmUpIGRvbmVDb3VudCsrOwogICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgcm93LmNsYXNzTmFtZSA9ICdjYXJkLXJvdyc7CiAgICAgIHJvdy5pbm5lckhUTUwgPSBgCiAgICAgICAgPHNwYW4gY2xhc3M9ImlkeCI+JHtpfTwvc3Bhbj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aHVtYiIgc3R5bGU9IiR7Yy5pbWcgPyBgYmFja2dyb3VuZC1pbWFnZTp1cmwoJyR7Yy5pbWd9JylgIDogJyd9Ij4ke2MuaW1nID8gJycgOiAn4pymJ308L2Rpdj4KICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtjLm5hbWUgfHwgJ+C4ouC4seC4h+C5hOC4oeC5iOC4leC4seC5ieC4h+C4iuC4t+C5iOC4rSd9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0dXMtZG90ICR7ZG9uZSA/ICdkb25lJyA6ICcnfSI+PC9zcGFuPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1naG9zdCIgZGF0YS1lZGl0PSIke2l9Ij7guYHguIHguYnguYTguII8L2J1dHRvbj4KICAgICAgYDsKICAgICAgcm93LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWVkaXRdJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBvcGVuRWRpdChpKSk7CiAgICAgIGxpc3QuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0pOwogICAgZWwoJ2NvbXBsZXRpb25UZXh0JykudGV4dENvbnRlbnQgPSBg4Lit4Lix4Lib4LmC4Lir4Lil4LiU4LmB4Lil4LmJ4LinICR7ZG9uZUNvdW50fSAvIDIyIOC5g+C4mmA7CiAgfQoKICBmdW5jdGlvbiBvcGVuRWRpdChpKXsKICAgIGVkaXRpbmdJbmRleCA9IGk7CiAgICBjb25zdCBjID0gY2FyZERhdGFbaV07CiAgICBlbCgnZWRpdE1vZGFsVGl0bGUnKS50ZXh0Q29udGVudCA9IGDguYHguIHguYnguYTguILguYTguJ7guYggIyR7aX1gOwogICAgZWwoJ2VkaXROYW1lJykudmFsdWUgPSBjLm5hbWU7CiAgICBlbCgnZWRpdE1lYW5pbmdVcCcpLnZhbHVlID0gYy51cDsKICAgIGVsKCdlZGl0TWVhbmluZ1JldicpLnZhbHVlID0gYy5yZXY7CiAgICBjb25zdCBkeiA9IGVsKCdlZGl0RHJvcHpvbmUnKTsKICAgIGlmIChjLmltZyl7CiAgICAgIGR6LmNsYXNzTmFtZSA9ICdkcm9wem9uZSBoYXMtaW1hZ2UnOwogICAgICBkei5pbm5lckhUTUwgPSBgPGltZyBzcmM9IiR7Yy5pbWd9Ij5gOwogICAgfSBlbHNlIHsKICAgICAgZHouY2xhc3NOYW1lID0gJ2Ryb3B6b25lJzsKICAgICAgZHoudGV4dENvbnRlbnQgPSAn4LiE4Lil4Li04LiB4LmA4Lie4Li34LmI4Lit4LmA4Lil4Li34Lit4LiB4Lij4Li54LibJzsKICAgIH0KICAgIGVsKCd2YWxpZGF0ZU1zZycpLnRleHRDb250ZW50ID0gJyc7CiAgICBlbCgnZWRpdE92ZXJsYXknKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7CiAgfQogIGVsKCdlZGl0Q2FuY2VsQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbCgnZWRpdE92ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JykpOwogIGVsKCdlZGl0T3ZlcmxheScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgaWYgKGUudGFyZ2V0LmlkID09PSAnZWRpdE92ZXJsYXknKSBlbCgnZWRpdE92ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7IH0pOwoKICBlbCgnZWRpdERyb3B6b25lJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbCgnZWRpdEZpbGVJbnB1dCcpLmNsaWNrKCkpOwogIGVsKCdlZGl0RmlsZUlucHV0JykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7CiAgICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXNbMF07CiAgICBpZiAoIWZpbGUpIHJldHVybjsKICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXYpewogICAgICBjb25zdCBkYXRhVXJsID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpewogICAgICAgIGNvbnN0IHcgPSBpbWcubmF0dXJhbFdpZHRoLCBoID0gaW1nLm5hdHVyYWxIZWlnaHQ7CiAgICAgICAgY29uc3QgcmF0aW8gPSB3IC8gaDsKICAgICAgICBjb25zdCB0YXJnZXQgPSBjYXJkUmF0aW9XIC8gY2FyZFJhdGlvSDsKICAgICAgICBjb25zdCBtaW5XID0gNzUwOwogICAgICAgIGNvbnN0IG1pbkggPSBNYXRoLnJvdW5kKG1pblcgKiAoY2FyZFJhdGlvSCAvIGNhcmRSYXRpb1cpKTsKICAgICAgICBjb25zdCBtc2cgPSBlbCgndmFsaWRhdGVNc2cnKTsKICAgICAgICBpZiAoTWF0aC5hYnMocmF0aW8gLSB0YXJnZXQpID4gMC4wNil7CiAgICAgICAgICBtc2cuY2xhc3NOYW1lID0gJ3ZhbGlkYXRlLW1zZyB3YXJuJzsKICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9IGDimqAg4Liq4Lix4LiU4Liq4LmI4Lin4LiZ4Lig4Liy4LieICR7d33DlyR7aH0g4LmE4Lih4LmI4LiV4Lij4LiHICR7Y2FyZFJhdGlvV306JHtjYXJkUmF0aW9IfSDguJ7guK3guJTguLUg4oCUIOC4ouC4seC4h+C4reC4seC4m+C5guC4q+C4peC4lOC5hOC4lOC5ieC5geC4leC5iOC4oOC4suC4nuC4reC4suC4iOC4luC4ueC4geC4hOC4o+C4reC4m+C4leC4reC4meC5geC4quC4lOC4h+C4nOC4pWA7CiAgICAgICAgfSBlbHNlIGlmICh3IDwgbWluVyB8fCBoIDwgbWluSCl7CiAgICAgICAgICBtc2cuY2xhc3NOYW1lID0gJ3ZhbGlkYXRlLW1zZyB3YXJuJzsKICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9IGDimqAg4LiE4Lin4Liy4Lih4Lil4Liw4LmA4Lit4Li14Lii4LiUICR7d33DlyR7aH1weCDguJXguYjguLPguIHguKfguYjguLLguJfguLXguYjguYHguJnguLDguJnguLMgKCR7bWluV33DlyR7bWluSH1weClgOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtc2cuY2xhc3NOYW1lID0gJ3ZhbGlkYXRlLW1zZyBvayc7CiAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSBg4pyTIOC4guC4meC4suC4lOC4oOC4suC4niAke3d9w5cke2h9cHgg4Lic4LmI4Liy4LiZ4LiV4Liy4Lih4Liq4LmA4Lib4LiBYDsKICAgICAgICB9CiAgICAgICAgY2FyZERhdGFbZWRpdGluZ0luZGV4XS5pbWcgPSBkYXRhVXJsOwogICAgICAgIGNvbnN0IGR6ID0gZWwoJ2VkaXREcm9wem9uZScpOwogICAgICAgIGR6LmNsYXNzTmFtZSA9ICdkcm9wem9uZSBoYXMtaW1hZ2UnOwogICAgICAgIGR6LmlubmVySFRNTCA9IGA8aW1nIHNyYz0iJHtkYXRhVXJsfSI+YDsKICAgICAgfTsKICAgICAgaW1nLnNyYyA9IGRhdGFVcmw7CiAgICB9OwogICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgfSk7CgogIGVsKCdlZGl0U2F2ZUJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgY2FyZERhdGFbZWRpdGluZ0luZGV4XS5uYW1lID0gZWwoJ2VkaXROYW1lJykudmFsdWUudHJpbSgpOwogICAgY2FyZERhdGFbZWRpdGluZ0luZGV4XS51cCA9IGVsKCdlZGl0TWVhbmluZ1VwJykudmFsdWUudHJpbSgpOwogICAgY2FyZERhdGFbZWRpdGluZ0luZGV4XS5yZXYgPSBlbCgnZWRpdE1lYW5pbmdSZXYnKS52YWx1ZS50cmltKCk7CiAgICBlbCgnZWRpdE92ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7CiAgICByZW5kZXJDYXJkTGlzdCgpOwogICAgc2F2ZU1ldGEoKTsKICB9KTsKCiAgLyogLS0tLS0tLS0tLSBTdGVwIDQ6IHJlYWRlciBwcmV2aWV3ICgxIG9yIDMgY2FyZCBkcmF3IHVzaW5nIHVwbG9hZGVkIGRlY2spIC0tLS0tLS0tLS0gKi8KICBsZXQgcHJldmlld0RlY2tPcmRlciA9IFtdOwogIGxldCBtb2RlQ291bnQgPSAxOwogIGxldCBpc1llc05vID0gZmFsc2U7CiAgbGV0IHBsYWNlZCA9IDA7CiAgbGV0IGRyYXduU2xvdHMgPSB7fTsKCiAgZnVuY3Rpb24gc2h1ZmZsZUFycihhcnIpewogICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID4gMDsgaS0tKXsKICAgICAgY29uc3QgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpOwogICAgICBbYXJyW2ldLCBhcnJbal1dID0gW2FycltqXSwgYXJyW2ldXTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGJ1aWxkRGVja1ByZXZpZXcoKXsKICAgIHJlc2V0UHJldmlldygpOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRQcmV2aWV3KCl7CiAgICBwbGFjZWQgPSAwOwogICAgZHJhd25TbG90cyA9IHt9OwogICAgZWwoJ3VzZXJRdWVzdGlvbicpLnZhbHVlID0gJyc7CiAgICBlbCgnZGVjay1hcmVhJykuY2xhc3NMaXN0LnJlbW92ZSgnZGVjay1kb25lJyk7CiAgICBlbCgneWVzTm9BbnN3ZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZWwoJ3llc05vQW5zd2VyJykudGV4dENvbnRlbnQgPSAnJzsKICAgIGVsKCdyZWFkaW5nU3VtbWFyeScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBlbCgncmVhZGluZ1N1bW1hcnknKS5pbm5lckhUTUwgPSAnJzsKICAgIFswLDEsMl0uZm9yRWFjaChpID0+IHsKICAgICAgY29uc3Qgc2NlbmUgPSBlbCgnc2NlbmUnICsgaSk7CiAgICAgIHNjZW5lLmNsYXNzTGlzdC5yZW1vdmUoJ2ZsaXBwZWQnLCdyZXZlcnNlZCcpOwogICAgICBlbCgnYmFjaycgKyBpKS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAnJzsKICAgICAgZWwoJ25hbWUnICsgaSkudGV4dENvbnRlbnQgPSAnJzsKICAgIH0pOwogICAgaWYgKG1vZGVDb3VudCA9PT0gMSl7CiAgICAgIGVsKCdzbG90LWNvbnRhaW5lci0wJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgZWwoJ3Nsb3QtY29udGFpbmVyLTInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBlbCgnc2xvdC1jb250YWluZXItMScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgICAgIGVsKCdsYWJlbDEnKS50ZXh0Q29udGVudCA9IGlzWWVzTm8gPyAn4LmE4Lie4LmI4LiE4Liz4LiV4Lit4LiaJyA6ICfguYTguJ7guYjguILguK3guIfguITguLjguJMnOwogICAgfSBlbHNlIHsKICAgICAgZWwoJ3Nsb3QtY29udGFpbmVyLTAnKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgICBlbCgnc2xvdC1jb250YWluZXItMScpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgICAgIGVsKCdzbG90LWNvbnRhaW5lci0yJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICAgICAgZWwoJ2xhYmVsMCcpLnRleHRDb250ZW50ID0gJ+C4reC4lOC4teC4lSc7CiAgICAgIGVsKCdsYWJlbDEnKS50ZXh0Q29udGVudCA9ICfguJvguLHguIjguIjguLjguJrguLHguJknOwogICAgICBlbCgnbGFiZWwyJykudGV4dENvbnRlbnQgPSAn4Lit4LiZ4Liy4LiE4LiVJzsKICAgIH0KICAgIGVsKCd1bmxvY2stc2VjdGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBlbCgnc3RhdHVzLWxpbmUnKS50ZXh0Q29udGVudCA9IGlzWWVzTm8gPyAn4LmB4LiV4Liw4LmE4Lie4LmI4LmA4Lie4Li34LmI4Lit4LiU4Li54LiE4Liz4LiV4Lit4LiaJyA6IChtb2RlQ291bnQgPT09IDEgPyAnJyA6ICfguYHguJXguLDguYTguJ7guYggMyDguITguKPguLHguYnguIcg4LiV4Liy4Lih4Lil4Liz4LiU4Lix4LiaJyk7CiAgICBjb25zdCB2YWxpZElkeCA9IGNhcmREYXRhLm1hcCgoYyxpKT0+aSkuZmlsdGVyKGkgPT4gY2FyZERhdGFbaV0udXAgfHwgY2FyZERhdGFbaV0ubmFtZSk7CiAgICBwcmV2aWV3RGVja09yZGVyID0gKHZhbGlkSWR4Lmxlbmd0aCA/IHZhbGlkSWR4IDogY2FyZERhdGEubWFwKChfLGkpPT5pKSkuc2xpY2UoKTsKICAgIHNodWZmbGVBcnIocHJldmlld0RlY2tPcmRlcik7CiAgICByZW5kZXJEZWNrRmFuKCk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJEZWNrRmFuKCl7CiAgICBjb25zdCBhcmVhID0gZWwoJ2RlY2stYXJlYScpOwogICAgYXJlYS5pbm5lckhUTUwgPSAnJzsKICAgIGlmIChwbGFjZWQgPj0gbW9kZUNvdW50KSByZXR1cm47CiAgICBjb25zdCB0b3RhbCA9IE1hdGgubWluKHByZXZpZXdEZWNrT3JkZXIubGVuZ3RoLCAyMik7CiAgICBjb25zdCBvZmZzZXQgPSA5LCBjZW50ZXIgPSAoKHRvdGFsLTEpKm9mZnNldCkvMjsKICAgIGZvciAobGV0IGk9MDtpPHRvdGFsO2krKyl7CiAgICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZC5jbGFzc05hbWUgPSAnZGVjay1jYXJkJzsKICAgICAgY29uc3QgeCA9IChpKm9mZnNldCkgLSBjZW50ZXI7CiAgICAgIGNvbnN0IHJvdCA9IChpIC0gKHRvdGFsLTEpLzIpICogMS42OwogICAgICBkLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKGNhbGMoLTUwJSArICR7eH1weCkpIHJvdGF0ZSgke3JvdH1kZWcpYDsKICAgICAgZC5zdHlsZS56SW5kZXggPSB0b3RhbCAtIGk7CiAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkcmF3UHJldmlld0NhcmQsIHsgb25jZTp0cnVlIH0pOwogICAgICBhcmVhLmFwcGVuZENoaWxkKGQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZHJhd1ByZXZpZXdDYXJkKCl7CiAgICBpZiAocGxhY2VkID49IG1vZGVDb3VudCB8fCAhcHJldmlld0RlY2tPcmRlci5sZW5ndGgpIHJldHVybjsKICAgIGNvbnN0IGlkeCA9IHByZXZpZXdEZWNrT3JkZXIucG9wKCk7CiAgICBjb25zdCBjID0gY2FyZERhdGFbaWR4XTsKICAgIGNvbnN0IGlzUmV2ID0gTWF0aC5yYW5kb20oKSA8IDAuNTsKICAgIGNvbnN0IHNsb3RJbmRleCA9IG1vZGVDb3VudCA9PT0gMSA/IDEgOiBwbGFjZWQ7CiAgICBjb25zdCBzY2VuZSA9IGVsKCdzY2VuZScgKyBzbG90SW5kZXgpOwogICAgY29uc3QgYmFja0VsID0gZWwoJ2JhY2snICsgc2xvdEluZGV4KTsKICAgIGJhY2tFbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBjLmltZyA/IGB1cmwoJyR7Yy5pbWd9JylgIDogJ2xpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMTM5LDkyLDI0NiwwLjQpLCByZ2JhKDUxLDIzMCwxOTYsMC4yKSknOwogICAgc2NlbmUuY2xhc3NMaXN0LnRvZ2dsZSgncmV2ZXJzZWQnLCBpc1Jldik7CiAgICBzY2VuZS5jbGFzc0xpc3QuYWRkKCdmbGlwcGVkJyk7CiAgICBlbCgnbmFtZScgKyBzbG90SW5kZXgpLnRleHRDb250ZW50ID0gKGMubmFtZSB8fCBg4LmE4Lie4LmIICMke2lkeH1gKSArIChpc1JldiA/ICcgKOC4geC4peC4seC4muC4q+C4seC4pyknIDogJycpICsgJyDigJQg4LmB4LiV4Liw4LmA4Lie4Li34LmI4Lit4LiU4Li54LiE4Liz4LiX4Liz4LiZ4Liy4LiiJzsKICAgIGJhY2tFbC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICBiYWNrRWwub25jbGljayA9ICgpID0+IHNob3dDYXJkUG9wdXAoaWR4LCBpc1Jldik7CiAgICBkcmF3blNsb3RzW3Nsb3RJbmRleF0gPSB7IGlkeCwgaXNSZXYgfTsKCiAgICBpZiAoaXNZZXNObyl7CiAgICAgIGNvbnN0IGJhbm5lciA9IGVsKCd5ZXNOb0Fuc3dlcicpOwogICAgICBiYW5uZXIudGV4dENvbnRlbnQgPSBpc1JldiA/ICfguYTguKHguYjguYPguIrguYgnIDogJ+C5g+C4iuC5iCc7CiAgICAgIGJhbm5lci5jbGFzc05hbWUgPSBpc1JldiA/ICdubycgOiAneWVzJzsKICAgICAgYmFubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgfQoKICAgIHBsYWNlZCsrOwoKICAgIGlmIChwbGFjZWQgPCBtb2RlQ291bnQpewogICAgICByZW5kZXJEZWNrRmFuKCk7CiAgICAgIGVsKCdzdGF0dXMtbGluZScpLnRleHRDb250ZW50ID0gYOC5gOC4peC4t+C4reC4geC5hOC4nuC5iOC4reC4teC4gSAke21vZGVDb3VudCAtIHBsYWNlZH0g4LmD4LiaYDsKICAgIH0gZWxzZSB7CiAgICAgIGVsKCdzdGF0dXMtbGluZScpLnRleHRDb250ZW50ID0gJyc7CiAgICAgIGVsKCdkZWNrLWFyZWEnKS5jbGFzc0xpc3QuYWRkKCdkZWNrLWRvbmUnKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHJlbmRlclJlYWRpbmdTdW1tYXJ5KCk7IHNob3dVbmxvY2tTZWN0aW9uKCk7IH0sIDUwMCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZW5kZXJSZWFkaW5nU3VtbWFyeSgpewogICAgY29uc3Qgc2xvdHMgPSBtb2RlQ291bnQgPT09IDEgPyBbMV0gOiBbMCwxLDJdOwogICAgY29uc3QgbGFiZWxNYXAgPSBtb2RlQ291bnQgPT09IDEgPyB7MTon4LmE4Lie4LmI4LiC4Lit4LiH4LiE4Li44LiTJ30gOiB7MDon4Lit4LiU4Li14LiVJywxOifguJvguLHguIjguIjguLjguJrguLHguJknLDI6J+C4reC4meC4suC4hOC4lSd9OwogICAgbGV0IGh0bWwgPSAnJzsKICAgIGNvbnN0IHF1ZXN0aW9uID0gZWwoJ3VzZXJRdWVzdGlvbicpLnZhbHVlLnRyaW0oKTsKICAgIGlmIChxdWVzdGlvbil7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InN1bW1hcnktaXRlbSIgc3R5bGU9ImJvcmRlci1jb2xvcjp2YXIoLS1ncmFkLWIpOyI+PHAgY2xhc3M9InN1bW1hcnktbGFiZWwiPuC4hOC4s+C4luC4suC4oeC4guC4reC4h+C4hOC4uOC4kzwvcD48aDQ+JyArIHF1ZXN0aW9uICsgJzwvaDQ+PC9kaXY+JzsKICAgIH0KICAgIHNsb3RzLmZvckVhY2goaSA9PiB7CiAgICAgIGNvbnN0IGluZm8gPSBkcmF3blNsb3RzW2ldOwogICAgICBpZiAoIWluZm8pIHJldHVybjsKICAgICAgY29uc3QgYyA9IGNhcmREYXRhW2luZm8uaWR4XTsKICAgICAgY29uc3QgdGl0bGUgPSAoYy5uYW1lIHx8ICgn4LmE4Lie4LmIICMnICsgaW5mby5pZHgpKSArIChpbmZvLmlzUmV2ID8gJyAo4LiB4Lil4Lix4Lia4Lir4Lix4LinKScgOiAnJyk7CiAgICAgIGNvbnN0IG1lYW5pbmcgPSAoaW5mby5pc1JldiA/IGMucmV2IDogYy51cCkgfHwgJ+C4ouC4seC4h+C5hOC4oeC5iOC5hOC4lOC5ieC5g+C4quC5iOC4hOC4p+C4suC4oeC4q+C4oeC4suC4ouC5hOC4p+C5ieC4quC4s+C4q+C4o+C4seC4muC5hOC4nuC5iOC5g+C4muC4meC4teC5iSc7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InN1bW1hcnktaXRlbSI+PHAgY2xhc3M9InN1bW1hcnktbGFiZWwiPicgKyBsYWJlbE1hcFtpXSArICc8L3A+JwogICAgICAgICsgJzxoND4nICsgdGl0bGUgKyAnPC9oND48cD4nICsgbWVhbmluZyArICc8L3A+PC9kaXY+JzsKICAgIH0pOwogICAgZWwoJ3JlYWRpbmdTdW1tYXJ5JykuaW5uZXJIVE1MID0gaHRtbDsKICAgIGVsKCdyZWFkaW5nU3VtbWFyeScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIH0KCiAgZnVuY3Rpb24gc2hvd0NhcmRQb3B1cChpZHgsIGlzUmV2KXsKICAgIGNvbnN0IGMgPSBjYXJkRGF0YVtpZHhdOwogICAgY29uc3QgaW1nRWwgPSBlbCgnY2FyZFBvcHVwSW1nJyk7CiAgICBpbWdFbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBjLmltZyA/IGB1cmwoJyR7Yy5pbWd9JylgIDogJ2xpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMTM5LDkyLDI0NiwwLjQpLCByZ2JhKDUxLDIzMCwxOTYsMC4yKSknOwogICAgaW1nRWwuc3R5bGUuZmlsdGVyID0gaXNSZXYgPyAnZ3JheXNjYWxlKDg4JSkgY29udHJhc3QoMS4wNSkgYnJpZ2h0bmVzcygwLjgyKScgOiAnbm9uZSc7CiAgICBlbCgnY2FyZFBvcHVwVGl0bGUnKS50ZXh0Q29udGVudCA9IChjLm5hbWUgfHwgJ+C5hOC4nuC5iCcpICsgKGlzUmV2ID8gJyAo4LiB4Lil4Lix4Lia4Lir4Lix4LinKScgOiAnJyk7CiAgICBlbCgnY2FyZFBvcHVwTWVhbmluZycpLnRleHRDb250ZW50ID0gKGlzUmV2ID8gYy5yZXYgOiBjLnVwKSB8fCAn4Lii4Lix4LiH4LmE4Lih4LmI4LmE4LiU4LmJ4LmD4Liq4LmI4LiE4Lin4Liy4Lih4Lir4Lih4Liy4Lii4LmE4Lin4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmE4Lie4LmI4LmD4Lia4LiZ4Li14LmJJzsKICAgIGVsKCdjYXJkUG9wdXBPdmVybGF5JykuY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogIH0KICBlbCgnY2FyZFBvcHVwQ2xvc2VCdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGVsKCdjYXJkUG9wdXBPdmVybGF5JykuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpKTsKICBlbCgnY2FyZFBvcHVwT3ZlcmxheScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgaWYgKGUudGFyZ2V0LmlkID09PSAnY2FyZFBvcHVwT3ZlcmxheScpIGVsKCdjYXJkUG9wdXBPdmVybGF5JykuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOyB9KTsKCiAgZnVuY3Rpb24gc2hvd1VubG9ja1NlY3Rpb24oKXsKICAgIGVsKCd1bmxvY2stc2VjdGlvbicpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgY29uc3QgYXJ0aXN0ID0gZWwoJ2FydGlzdE5hbWUnKS52YWx1ZSB8fCAn4Lio4Li04Lil4Lib4Li04LiZJzsKICAgIGVsKCdjdGFBcnRpc3ROYW1lJykudGV4dENvbnRlbnQgPSBhcnRpc3Q7CiAgICBjb25zdCBsaW5rID0gZWwoJ3B1cmNoYXNlTGluaycpLnZhbHVlLnRyaW0oKTsKICAgIGNvbnN0IGJ0biA9IGVsKCdwdXJjaGFzZUxpbmtCdG4nKTsKICAgIGlmIChsaW5rKXsKICAgICAgYnRuLmhyZWYgPSBsaW5rLnN0YXJ0c1dpdGgoJ2h0dHAnKSA/IGxpbmsgOiAoJ2h0dHBzOi8vJyArIGxpbmspOwogICAgICBidG4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwogICAgfSBlbHNlIHsKICAgICAgYnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9CiAgfQoKICBlbCgnbW9kZTEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIG1vZGVDb3VudCA9IDE7CiAgICBpc1llc05vID0gZmFsc2U7CiAgICBlbCgnbW9kZTEnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIGVsKCdtb2RlMycpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgZWwoJ21vZGVZZXNObycpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgcmVzZXRQcmV2aWV3KCk7CiAgfSk7CiAgZWwoJ21vZGUzJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBtb2RlQ291bnQgPSAzOwogICAgaXNZZXNObyA9IGZhbHNlOwogICAgZWwoJ21vZGUzJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgICBlbCgnbW9kZTEnKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIGVsKCdtb2RlWWVzTm8nKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIHJlc2V0UHJldmlldygpOwogIH0pOwogIGVsKCdtb2RlWWVzTm8nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIG1vZGVDb3VudCA9IDE7CiAgICBpc1llc05vID0gdHJ1ZTsKICAgIGVsKCdtb2RlWWVzTm8nKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIGVsKCdtb2RlMScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgZWwoJ21vZGUzJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICByZXNldFByZXZpZXcoKTsKICB9KTsKICBlbCgncmVzZXRQcmV2aWV3QnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZXNldFByZXZpZXcpOwoKICAvKiAtLS0tLS0tLS0tIGJvb3RoIC8ga2lvc2sgbW9kZSAtLS0tLS0tLS0tCiAgICAg4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lij4Lir4Lix4Liq4LiZ4Li14LmJ4LmE4LiU4LmJ4LiV4Liy4Lih4LiV4LmJ4Lit4LiH4LiB4Liy4LijIOC5g+C4iuC5ieC4geC4seC4meC4peC4ueC4geC4hOC5ieC4suC5gOC4nOC4peC4reC4geC4lOC4geC4peC4seC4muC5hOC4m+C4q+C4meC5ieC4suC4leC4seC5ieC4h+C4hOC5iOC4siAqLwogIGNvbnN0IEtJT1NLX0VYSVRfUElOID0gJzEyMzQnOwogIGxldCBzYXZlZEhlcm9UaXRsZSA9ICcnLCBzYXZlZEhlcm9UYWdsaW5lID0gJyc7CgogIGVsKCdraW9za0VudGVyQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBzYXZlZEhlcm9UaXRsZSA9IGVsKCdtYWluVGl0bGUnKS50ZXh0Q29udGVudDsKICAgIHNhdmVkSGVyb1RhZ2xpbmUgPSBlbCgnbWFpblRhZ2xpbmUnKS50ZXh0Q29udGVudDsKICAgIGNvbnN0IGRlY2tUaXRsZSA9IGVsKCdkZWNrTmFtZScpLnZhbHVlLnRyaW0oKSB8fCAn4LmE4Lie4LmI4LiX4Liy4LmC4Lij4LiV4LmMJzsKICAgIGNvbnN0IGFydGlzdCA9IGVsKCdhcnRpc3ROYW1lJykudmFsdWUudHJpbSgpOwogICAgZWwoJ21haW5UaXRsZScpLnRleHRDb250ZW50ID0gZGVja1RpdGxlOwogICAgZWwoJ21haW5UYWdsaW5lJykudGV4dENvbnRlbnQgPSBhcnRpc3QgPyBg4LmC4LiU4LiiICR7YXJ0aXN0fWAgOiAnJzsKICAgIGVsKCdtYWluVGFnbGluZScpLnN0eWxlLmRpc3BsYXkgPSBhcnRpc3QgPyAnYmxvY2snIDogJ25vbmUnOwogICAgZWwoJ3BhbmVsNFRpdGxlJykudGV4dENvbnRlbnQgPSAn4LmB4LiV4Liw4LmE4Lie4LmI4LmA4Lie4Li34LmI4Lit4LiU4Li54LiU4Lin4LiHJzsKICAgIGVsKCdwYW5lbDRIaW50JykudGV4dENvbnRlbnQgPSAnJzsKICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuY2xhc3NMaXN0LmFkZCgna2lvc2stbW9kZScpOwogICAgZ29Ub1N0ZXAoJzQnKTsKICB9KTsKCiAgZWwoJ2tpb3NrRXhpdExpbmsnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIGNvbnN0IHBpbiA9IHByb21wdCgn4LmD4Liq4LmI4Lij4Lir4Lix4LiqIDQg4Lir4Lil4Lix4LiB4LmA4Lie4Li34LmI4Lit4LiB4Lil4Lix4Lia4LmE4Lib4Lir4LiZ4LmJ4Liy4LiV4Lix4LmJ4LiH4LiE4LmI4LiyJyk7CiAgICBpZiAocGluID09PSBudWxsKSByZXR1cm47CiAgICBpZiAocGluID09PSBLSU9TS19FWElUX1BJTil7CiAgICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuY2xhc3NMaXN0LnJlbW92ZSgna2lvc2stbW9kZScpOwogICAgICBlbCgnbWFpblRpdGxlJykudGV4dENvbnRlbnQgPSBzYXZlZEhlcm9UaXRsZTsKICAgICAgZWwoJ21haW5UYWdsaW5lJykudGV4dENvbnRlbnQgPSBzYXZlZEhlcm9UYWdsaW5lOwogICAgICBlbCgnbWFpblRhZ2xpbmUnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgZWwoJ3BhbmVsNFRpdGxlJykudGV4dENvbnRlbnQgPSAn4Lie4Lij4Li14Lin4Li04Lin4LmA4Lib4LmH4LiZ4Lic4Li54LmJ4LmA4Lil4LmI4LiZ4LiI4Lij4Li04LiHJzsKICAgICAgZWwoJ3BhbmVsNEhpbnQnKS50ZXh0Q29udGVudCA9ICfguJnguLXguYjguITguLfguK3guKrguLTguYjguIfguJfguLXguYjguKXguLnguIHguITguYnguLLguILguK3guIfguKjguLTguKXguJvguLTguJnguIjguLDguYDguKvguYfguJnguYHguKXguLDguYPguIrguYnguIjguYjguLLguKLguYDguIfguLTguJnguIjguKPguLTguIcnOwogICAgICBnb1RvU3RlcCgnMScpOwogICAgfSBlbHNlIHsKICAgICAgYWxlcnQoJ+C4o+C4q+C4seC4quC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hycpOwogICAgfQogIH0pOwoKICBsb2FkTWV0YSgpOwogIHJlbmRlckNhcmRMaXN0KCk7CgogIC8vIEFVVE9QTEFZLUJPT1RTVFJBUC1TVEFSVCAocGVyc29uYWwgZmlsZSBvbmx5IOKAlCBzdHJpcHBlZCBvdXQgb2YgU2FsZS9EZW1vIGJ1aWxkcykKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICBjb25zdCBoYXNEYXRhID0gY2FyZERhdGEuc29tZShjID0+IGMubmFtZSB8fCBjLnVwKTsKICAgIGlmICghaGFzRGF0YSAmJiAhZWwoJ2RlY2tOYW1lJykudmFsdWUudHJpbSgpKXsKICAgICAgRVhJU1RJTkdfREVDSy5mb3JFYWNoKGZ1bmN0aW9uKGQsaSl7IGNhcmREYXRhW2ldLm5hbWUgPSBkLm5hbWU7IGNhcmREYXRhW2ldLmltZyA9IGQuaW1nOyBjYXJkRGF0YVtpXS51cCA9IGQudXA7IGNhcmREYXRhW2ldLnJldiA9IGQucmV2OyB9KTsKICAgICAgZWwoJ2RlY2tOYW1lJykudmFsdWUgPSAnVGhlIFRhcm90IENhcmRzIChDaGluYSBEaWdpdGFsIEVkaXRpb24pJzsKICAgICAgcmVuZGVyQ2FyZExpc3QoKTsKICAgICAgc2F2ZU1ldGEoKTsKICAgIH0KICAgIGVsKCdraW9za0VudGVyQnRuJykuY2xpY2soKTsKICB9LCA1MCk7CiAgLy8gQVVUT1BMQVktQk9PVFNUUkFQLUVORAp9KTs=
จากเดโมเล็ก ๆ สู่โปรเจกต์จริง
หลังจากเดโมแรกทำงานได้ คำถามต่อไปจึงไม่ใช่เพียงว่า “เราทำให้ไพ่เล่นได้หรือไม่” แต่กลายเป็นว่า
เราจะทำให้ศิลปินคนอื่นนำไพ่ของตัวเองเข้ามาใช้ได้อย่างไร
จากเดโมที่มีไพ่และข้อความกำหนดไว้ล่วงหน้า แนวคิดจึงค่อย ๆ พัฒนาเป็นเครื่องมือที่ศิลปินสามารถใส่ภาพไพ่ เขียนความหมาย ปรับสี เลือกสัดส่วน และนำไปเปิดให้ลูกค้าทดลองเล่นได้ด้วยตัวเอง
โปรแกรมนี้มีชื่อว่า สำรับมีชีวิต — ชุดโปรแกรมสำหรับศิลปินทาโรต์
ส่วนโปรเจกต์ทั้งหมด ตั้งแต่ปัญหาที่พบ วิธีทำงาน ไปจนถึงรูปแบบการซื้อและดาวน์โหลด สามารถดูได้ที่หน้า:
ไพ่ทาโรต์ที่ทำเงินได้
แปลงไพ่ทาโรต์ที่คุณออกแบบ ให้มีชีวิตบนหน้าจอ
เดโมแรกอาจมีเพียงไพ่หนึ่งใบ แต่สิ่งที่มันเปิดออกมาไม่ได้มีแค่คำทำนาย มันเปิดให้เห็นว่า งานวาดสามารถพัฒนาไปเป็นเครื่องมือ ประสบการณ์ และช่องทางสร้างรายได้รูปแบบใหม่ได้