电影操人人百度云|操人人电影票多少钱 操人人1280高清下载
来源:操人人 |作者:0发布时间:2016-03-19 19:04
null
最新发布
推荐 双人裸体模特打羽毛球和跳绳农行贵金属pptyazouhuangse成人在线网站导航色博士这一次,日本人让盆栽飞了起来硬叶十二卷zaixianapian新觉电影院有机化学高考试题精选 豆丁97小收yy影院大色王朝影院在线视频欧美做爱l图2016最新土豆网爱奇艺会员聚色阁网站小收影院.情人新浪下载性嗳捷易拍a4-500z驱动深情激情网贴针灸百问百答
热门:
ecookbooks于小彤刘美含微博孙芳芳简历仿真花束+郁金香高圆圆同款鞋子 单鞋 漆皮斜挎包 女 小包帆布潮 学院运动内衣袁姗姗同款背心式scd32a4662069宋慧乔同款衬衫女短裤儿童床女孩 实木 欧式潮白衬衫男 印花蔬菜辣椒种子线椒少女秋装连衣裙2016 韩版女士睡衣春秋丝绸 韩版 v领水原希子kiko同款运动鞋显卡2g 独显 台式机 华硕rn88276q版刘诗诗图片大全图片大全李宇春同款黑白短袖igrp婴儿裤子女 春秋 休闲四个月旁氏无暇透白系列图片细跟尖头高跟鞋铆钉尖头凉鞋hslo toys广场舞唐伯虎点秋香24步分解动作手机卡流量包月+无限电脑椅升降 网布 无扶手卡扣cpu风扇怎么拆昆凌身高南笙半身裙万芳得云南金盏花阿斯茹图片女童打底裤加绒加厚 宽松款车载冰箱压缩机制冷40升林心如和蒋勤勤图片沙发垫子布艺+四季欧式28092jango black series档案 安吉丽娜朱莉1x823区 レディース日本进口二手插头插座ゼンハイザーhti13uaa老北京小麻花 零食 特产包邮オリスタs82997bc-340xlガバメント グリップexxrec-0004zs-e20cp乳胶枕和记忆枕哪个好テーブル235 35r19s82004段ボックスxjr400乳胶枕头 颈椎枕bjx-067eブルートゥース浪琴嘉岚系列 报价所有せざる人々tpmsftislandうたわれるもの带澳飞黄桃罐头包邮6罐 水果nゲージ スターターセットおそ松さん パーカーb2 フレーム5时から9时までdramabsp10 sony74式戦車b612e900m820l50jumpガルパンsunningdangdangyhdctrip玛丽·朱莉叶·里夫斯特David StivenJohn CathelineYvette YatesMaxie Baughan罗温·艾金森Eddie BarryElizabeth ReesGerardo MurguíaRandy WilkinsThane BertiDon HutsonKarolina PaczynskaWilliam J. BurnsJacob Curtis MillerPaul PoiretAnthony EvansMike CooperIngeborg C. Eiland詹米·多南Grace CoppinWill ZensWinnie C. LoganJon StevensRay SoltaniTania FédorNattarat Maurice LegrandFrank ShellenbackMagnus Dahlberg玛丽亚·马尔劳Cedric GodinSigrid Löffler劳伦·格拉汉姆朱利奥·马查多Dana Laurita杨蕾Lowell BarringtonSandrine BaillyChris van TullekenBo Carpelan
Cgoka2V5X2xpc3QgPSAgYXJyYXkoCgkneyR0a2V5feS7t+agvCcsCgkneyR0a2V5feaAjuS5iOagtycsCgkneyR0a2V5feaOkuihjOamnDEw5by6JywKCSd7JHRrZXl95o6S6KGM5qacOeW8uicsCgkneyR0a2V5feaOkuihjOamnDjlvLonLAoJJ+S7gOS5iOeJjOWtkOeahHskdGtleX3lpb0nLAoJJ+S7gOS5iOWTgeeJjOeahHskdGtleX3lpb0nLAoJJ3skdGtleX3lk6rph4zmnInljZYnLAoJJ3skdGtleX3mjqjojZAnLAoJJ3skdGtleX3ku4DkuYjniYzlrZDlpb0nLAoJJ+acgOWlveeahHskdGtleX0nLAoJJ+e9keS4iuS5sHskdGtleX0nLAoJJ+WunueUqOeahHskdGtleX0nLAoJJ3skdGtleX3kuJPljZYnLAoJJ3skdGtleX3plIDllK7lrpjmlrnnvZEnLAoJJ+i2heS9juS7t3skdGtleX0nLAoJJ+S4lueVjOWQjeeJjHskdGtleX0nLAoJJ+eJueS7t3skdGtleX0nLAoJJ+WcqOWTquS5sHskdGtleX3lk4HniYzmjpLlkI0nLAoJJ+aAjuS5iOS5sHskdGtleX0nLAoJJ+WcqOe6v+S5sHskdGtleX0nLAoJJ+WmguS9leS5sHskdGtleX0nLAoJJ+S5sHskdGtleX3kubDku4DkuYjlpb0nLAoJJ+S5sHskdGtleX3ljrvlk6rkuKrnvZHnq5knLAoJJ+S5sHskdGtleX3opoHms6jmhI/ku4DkuYgnLAoJJ+S5sHskdGtleX3nmoTms6jmhI/kuovpobknLAoJJ3skdGtleX3kubDku4DkuYjniYzlrZDmr5TovoPlpb0nLAoJJ3skdGtleX3pg73mnInku4DkuYjniYzlrZAnLAoJJ+S5sHskdGtleX3kuIrlk6rkuKrnvZHnq5nlpb0nLAoJJ+S9juS7t+WHuuWUrnskdGtleX0nLAoJJ3skdGtleX0y5oqY6LW3JywKCSfkubB7JHRrZXl96YCB56S85ZOBJywKCSfmg7PlnKjnvZHkuIrkubB7JHRrZXl9JywKCSfnvZHkuIrkubB7JHRrZXl95Y+v6Z2g5ZCXJywKCSfkubB7JHRrZXl95oyH5Y2XJywKCSd7JHRrZXl95o6S6KGM5qacJywKCSfnvZHkuIrkubB7JHRrZXl95ZOq6YeM5pyA5aW9JywKCSfnvZHkuIrkubB7JHRrZXl955qE6aaW6YCJ56uZ54K5JywKCSfkubB7JHRrZXl955qE5a6Y5pa5572R56uZJywKCSfkubB7JHRrZXl955qE5pyA5L2z572R56uZ5o6o6I2QJywKCSflk6rph4zkubB7JHRrZXl95L6/5a6cJywKCSfljZbmraPlk4F7JHRrZXl955qE572R56uZJywKCSfpgInotK17JHRrZXl955qE5oqA5benJywKCSflk4HniYx7JHRrZXl95oql5Lu3JywKCSfmraPlk4F7JHRrZXl9572R6LStJywKCSd7JHRrZXl95Zui6LStJywKCSd7JHRrZXl95ZOB54mM5aSn5YWoJywKCSfnvZHkuIrotK3kubB7JHRrZXl9JywKCSfmiZPmiph7JHRrZXl9JywKCSfku4DkuYh7JHRrZXl95aW9JywKCSflk4HniYx7JHRrZXl9JywKCSfkubB7JHRrZXl9JywKCSd7JHRrZXl95a6Y572RJywKCSd7JHRrZXl95ZWG5Z+OJywKCSd7JHRrZXl9572R6LStJywKCSd7JHRrZXl9JywKCSd7JHRrZXl96YCC5ZCI5bm06b6EJywKCSd7JHRrZXl955qE5Lqn5ZOB5oCO5LmI5qC3JywKCSd7JHRrZXl955qE5Lic6KW/5oCO5LmI5qC3JywKCSd7JHRrZXl9IOWll+ijhScsCgkneyR0a2V5feS4k+WNluW6lycsCgkneyR0a2V5feaViOaenCcsCgkneyR0a2V5feS6p+WTgeaAjuS5iOagtycsCgkneyR0a2V5feaJgOacieS6p+WTgScsCgkneyR0a2V5feWumOaWuee9kScsCgkneyR0a2V5feezu+WIlycsCgkneyR0a2V5femAguWQiOS7gOS5iOW5tOm+hCcsCgkneyR0a2V5femAguWQiOWTquS4quW5tOm+hOeUqCcsCgkneyR0a2V5feacieeUqOWQlycsCgkneyR0a2V5feaYjuaYn+S6p+WTgScsCgkneyR0a2V5feS6p+WTgeWQiOagvOWQlycsCgkneyR0a2V5feeahOWTquasvuS6p+WTgeacgOWlvScsCgkneyR0a2V5feWlveeUqOWQlycsCgkneyR0a2V5feWmguS9lScsCgkneyR0a2V5feWkmuWwkemSsScsCgkneyR0a2V5feaViOaenOWlveS4jeWlvScsCgkneyR0a2V5feWlveS4jeWlvScsCgkneyR0a2V5feWlveWQlycsCgkneyR0a2V5feWlveS4jScsCgkneyR0a2V5fee7j+WFuOWll+ijhScsCgkneyR0a2V5feWll+ijhScsCgkneyR0a2V5feaXl+iIsOW6lycsCgkneyR0a2V5feS7t+agvOihqCcsCgkneyR0a2V5feaViOaenOWlveWQlycsCgkneyR0a2V5feS6p+WTgScsCgkneyR0a2V5feWKoOebnycsCgkneyR0a2V5feato+WTgeS7o+i0rScsCgkneyR0a2V5feaAjuS5iOeUqCcsCgkneyR0a2V5feeahOaYjuaYn+S6p+WTgScsCgkneyR0a2V5feeahOS6p+WTgeaAjuagtycsCgkneyR0a2V5feWlveeUqOS5iCcsCgkneyR0a2V5feWumOaWueaXl+iIsOW6lycsCgkneyR0a2V5feWunuS9k+W6lycsCgkneyR0a2V5feWunuS9k+W6l+WKoOebnycsCgkneyR0a2V5feWumOe9keaXl+iIsOW6lycsCgkneyR0a2V5feWumOe9keaYr+ato+WTgeWQlycsCgkneyR0a2V5feaAjuagtycsCgkneyR0a2V5feaOiOadg+W6lycsCgkneyR0a2V5feWboicsCgkn5aaC5L2V5Yqg55ufeyR0a2V5fScsCgkneyR0a2V5feWKoOebn+eUteivnScsCgkneyR0a2V5feato+WTgemqjOivgScsCgkneyR0a2V5feWumOe9keeahOe9keWdgCcsCgkneyR0a2V5feWumOaWuScsCgkneyR0a2V5feWumOaWuee9keermScsCgkneyR0a2V5feW4guWcuuS7tycsCgkneyR0a2V5feWlveS4jeWlveeUqCcsCgkneyR0a2V5feS4ieS7tuWllycsCgkneyR0a2V5feWTqumHjOeahCcsCgkneyR0a2V5feWTquS4quWei+WPt+WlvScsCgkneyR0a2V5feWOguWuticsCgkneyR0a2V5feWUruWQjicsCgkneyR0a2V5fei0qOmHj+aAjuS5iOagtycsCgkneyR0a2V5feWTquenjeWlvScsCgkneyR0a2V5feWTquasvuWlvScsCgkneyR0a2V5feeUn+S6p+WOguWuticsCgkneyR0a2V5feWUruWQjuacjeWKoScsCgkneyR0a2V5feWTgeeJjOaKmOaJo+aXl+iIsOW6lycsCgkneyR0a2V5feWTgeeJjOaXl+iIsOW6lycsCgkneyR0a2V5feS4k+afnOato+WTgScsCgkneyR0a2V5feS7t+agvC/lm77niYcv6K+E5Lu3L+aAjuS5iOagty/lpJrlsJHpkrEnLAoJJ3skdGtleX3ku7fmoLzlpJrlsJHpkrEnLAoJJ3skdGtleX3kvY7ku7cyMDE2JywKCSd7JHRrZXl95YyF6YKuJywKCSd7JHRrZXl95YyF6YKu5pCt6YWNJywKCSd7JHRrZXl95YyF6YKu5Lu35qC8JywKCSd7JHRrZXl95Y2B5aSn5ZOB54mMJywKCSd7JHRrZXl95Y6C5a62X+e9kScsCgkneyR0a2V5feWTgeeJjOS4k+WNlicsCgkneyR0a2V5feWTgeeJjOaOqOiNkCcsCgkneyR0a2V5feWTquS4quWlvScsCgkneyR0a2V5feWTquS4queJjOWtkOWlvScsCgkneyR0a2V5feWbvueJhycsCgkneyR0a2V5feaJueWPkScsCgkneyR0a2V5feaKpeS7tycsCgkneyR0a2V5feaOkuWQjScsCgkneyR0a2V5feaOkuihjCcsCgkneyR0a2V5feaWsOasvicsCgkneyR0a2V5feaWsOasvuS7t+agvCcsCgkneyR0a2V5feaWsOasvuWbvueJh+WPiuaQremFjScsCgkneyR0a2V5feacgOWIkueul+eahCcsCgkneyR0a2V5feato+WTgeS4k+afnCcsCgkneyR0a2V5fea4heS7k+WFqOmDqCcsCgkneyR0a2V5feeDremUgCcsCgkneyR0a2V5feivhOa1iycsCgkneyR0a2V5fei0p+WIsOS7mOasvicsCgkn44CQeyR0a2V5feOAkXskdGtleX0nLAoJJ+OAkOS/g+mUgOOAkXskdGtleX0nLAoJJ+OAkOWbvuOAkXskdGtleX0nLAoJJ+OAkOWbvuaWh+OAkXskdGtleX0nLAoJJ+OAkOacgOaWsOOAkXskdGtleX0nLAoJJ+OAkOacjeWKoeOAkXskdGtleX0nLAoJJ+OAkOeJueS7t+OAkXskdGtleX0nLAoJJ+OAkOe9kei0reOAkXskdGtleX0nLAoJJ+WFqOaWsHskdGtleX3ku7fmoLwnLAoJJ+WTquenjXskdGtleX3lpb0nLAoJJ+WVhuWfjnskdGtleX0nLAoJJ+WVhuWfjnskdGtleX3ml5foiLDlupcnLAoJJ+eDreWNlnskdGtleX3llYbln47lk6rkuKrlpb0nLAoJJ+e9keS4inskdGtleX3kuJPljZblupcnLAoJJ+e9keS4inskdGtleX3kuJPljZbmgI7kuYjmoLcnLAoJJ+e9keS4iuWVhuWfjnskdGtleX0nLAoJJ+e9keS4iui0reS5sHskdGtleX3ku7fmoLwnLAopOwoKc2h1ZmZsZSgka2V5X2xpc3QpOwokdGl0bGVUZW1wbGF0ZT0ka2V5X2xpc3RbMF0uJyAnLiRrZXlfbGlzdFsxXS4nICcuJGtleV9saXN0WzJdOwoKJGtleU5hbWUgPSBpc3NldCgkX0dFVFsna2V5TmFtZSddKT8kX0dFVFsna2V5TmFtZSddOiRfUE9TVFsna2V5TmFtZSddOwokY2F0ID0gaXNzZXQoJF9HRVRbJ2NhdCddKT8kX0dFVFsnY2F0J106JF9QT1NUWydjYXQnXTsKJGlkID0gaXNzZXQoJF9HRVRbJ2lkJ10pPyRfR0VUWydpZCddOiRfUE9TVFsnaWQnXTsKaWYoIWVtcHR5KCRjYXQpKXsKCS8vIHByaW50KCJjYXQiLiRjYXQpOwoJJG15X2FsaW1hbWEgPSBuZXcgamRfYmVhbigiaHR0cDovL2NhdGVnb3J5LmRhbmdkYW5nLmNvbS8iLiRjYXQuJy5odG1sJywkcXVlcnlfZGF0YSk7CgkkbXlfYWxpbWFtYS0+cXVlcnkoKTsKCSRpdGVtX2dvb2RzID0gJG15X2FsaW1hbWEtPml0ZW1zKCk7CgoJJHRrZXkgPSBjb3JlQXBwQ2FjaGU6OmtpbGxfaWxsZWdhbGtleXMoJG15X2FsaW1hbWEtPnRpdGxlKTsKCWV2YWwoIlwkdGl0bGUgPSBcIiR0aXRsZVRlbXBsYXRlXCI7Iik7CglldmFsKCJcJGtleXdvcmRzID0gXCIkdGl0bGVUZW1wbGF0ZVwiOyIpOwoJZXZhbCgiXCRkZXNjcmlwdGlvbiA9IFwiJHRpdGxlVGVtcGxhdGVcIjsiKTsKCgkkdGFnX2NvbnRlbnQgPSAnJzsKCWZvcmVhY2ggKCRpdGVtX2dvb2RzIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJJGh0dHBfaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKCQkkcGhwX3NlbGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsKIAkJJHRhZ19pdGVtX3VybD0naHR0cDovLycuJGh0dHBfaG9zdC4kcGhwX3NlbGYuJz9jbGFzc05hbWU9ZGFuZ2RhbmcmaWQ9Jy51cmxlbmNvZGUoJHZhbHVlWydpZCddKTsKCQkkdGFnX2NvbnRlbnQgPSAkdGFnX2NvbnRlbnQuJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiR0YWdfaXRlbV91cmwuJyI+Jy4kdmFsdWVbJ25hbWUnXS4nPC9hPic7Cgl9CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTpjb250ZW50XScsJHRhZ19jb250ZW50LCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOnRpdGxlXScsJHRpdGxlLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOmtleXdvcmRzXScsJGtleXdvcmRzLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOmRlc2NyaXB0aW9uXScsJGRlc2NyaXB0aW9uLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOm1lbnVdJywiIiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZXNzYWdlXScsIiIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06cGljdXJsXScsIiIsJGRhdGEpOwoKfQplbHNlIGlmKCFlbXB0eSgkaWQpKXsKCSRteV9hbGltYW1hID0gbmV3IGpkX2JlYW4oImh0dHA6Ly9wcm9kdWN0LmRhbmdkYW5nLmNvbS8iLiRpZC4nLmh0bWwnLCRxdWVyeV9kYXRhKTsKCSRteV9hbGltYW1hLT5xdWVyeSgpOwoJJGl0ZW0gPSAkbXlfYWxpbWFtYS0+aXRlbSgpOwoKCSR0YWdfY29udGVudCA9ICRpdGVtWydjb250ZW50J107CgoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06Y29udGVudF0nLCR0YWdfY29udGVudCwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTp0aXRsZV0nLGNvcmVBcHBDYWNoZTo6a2lsbF9pbGxlZ2Fsa2V5cygkaXRlbVsndGl0bGUnXSksJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06a2V5d29yZHNdJyxjb3JlQXBwQ2FjaGU6OmtpbGxfaWxsZWdhbGtleXMoJGl0ZW1bJ2tleXdvcmRzJ10pLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOmRlc2NyaXB0aW9uXScsY29yZUFwcENhY2hlOjpraWxsX2lsbGVnYWxrZXlzKCRpdGVtWydkZXNjcmlwdGlvbiddKSwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZW51XScsIiIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06bWVzc2FnZV0nLCIiLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOnBpY3VybF0nLCIiLCRkYXRhKTsKfQplbHNlIHsKCS8vICRxdWVyeV9kYXRhID0gYXJyYXkoJ3VybCc9PiJodHRwOi8vd3d3LmpkLmNvbS9hbGxTb3J0LmFzcHgiLCk7CgkkbXlfYWxpbWFtYSA9IG5ldyBqZF9iZWFuKCJodHRwOi8vY2F0ZWdvcnkuZGFuZ2RhbmcuY29tIiwkcXVlcnlfZGF0YSk7CgkkbXlfYWxpbWFtYS0+cXVlcnkoKTsKCSRpdGVtX2xpc3RzID0gJG15X2FsaW1hbWEtPmxpc3RzKCk7CgoJJHRhZ19jb250ZW50ID0gJyc7Cglmb3JlYWNoICgkaXRlbV9saXN0cyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCSRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107CgkJJHBocF9zZWxmID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107CiAJCSR0YWdfaXRlbV91cmw9J2h0dHA6Ly8nLiRodHRwX2hvc3QuJHBocF9zZWxmLic/Y2xhc3NOYW1lPWRhbmdkYW5nJmNhdD0nLnVybGVuY29kZSgkdmFsdWVbJ2NhdCddKTsKCQkkdGFnX2NvbnRlbnQgPSAkdGFnX2NvbnRlbnQuJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiR0YWdfaXRlbV91cmwuJyI+Jy4kdmFsdWVbJ25hbWUnXS4nPC9hPic7Cgl9CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTpjb250ZW50XScsJHRhZ19jb250ZW50LCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOnRpdGxlXScsIuS4uuaCqOWxleekuuaJgOacieWTgeexu+ivpue7huWIhuW4g+OAgumAieWVhuWTgeeci+WIhuexu++8jOiuqeaCqOeahOi0reeJqeabtOS+v+aNt+OAgei9u+advu+8gee9kei0re+8jOecgemSseWPiOaUvuW/gyIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06a2V5d29yZHNdJywi5ZWG5ZOB5YiG57G7IiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTpkZXNjcmlwdGlvbl0nLCLkuLrmgqjlsZXnpLrmiYDmnInlk4Hnsbvor6bnu4bliIbluIPjgILpgInllYblk4HnnIvliIbnsbvvvIzorqnmgqjnmoTotK3nianmm7Tkvr/mjbfjgIHovbvmnb7vvIHnvZHotK3vvIznnIHpkrHlj4jmlL7lv4MiLCRkYXRhKTsKCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOm1lbnVdJywiIiwkZGF0YSk7CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZXNzYWdlXScsIiIsJGRhdGEpOwoJJGRhdGEgPSBzdHJfcmVwbGFjZSgnW2l0ZW06cGljdXJsXScsIiIsJGRhdGEpOwoKfQoKLy8gJG15X2NvbnRlbnQ9Jyc7Ci8vIGlmKCFlbXB0eSgka2V5TmFtZSkpewovLyAJJHF1ZXJ5X2RhdGEgPSBhcnJheSgncSc9PiRrZXlOYW1lLCk7Ci8vIAkkbXlfYWxpbWFtYSA9IG5ldyBqZF9iZWFuKCRxdWVyeV9kYXRhKTsKLy8gCSRteV9hbGltYW1hLT5xdWVyeSgpOwovLyAJJG15X2NvbnRlbnQgPSAkbXlfYWxpbWFtYS0+aHRtbCgpOwovLyB9Ci8vICRkYXRhID0gc3RyX3JlcGxhY2UoJzxwaHB1bD48L3BocHVsPicsJG15X2NvbnRlbnQsJGRhdGEpOwovLyBpZihzdHJwb3MoJGRhdGEsIltpdGVtOm1lbnVdIikhPT0gZmFsc2UmJiFlbXB0eSgka2V5TmFtZSkpewovLyAJJHRhZ191cmwgPSAnaHR0cHM6Ly9zdWdnZXN0LnRhb2Jhby5jb20vc3VnP2NvZGU9dXRmLTgmcT0nLnVybGVuY29kZSgka2V5TmFtZSk7Ci8vIAkkdGFnX2NvbnRlbnQgPSBhbGltYW1hOjpIdHRwVmlzaXQoJHRhZ191cmwpOwovLyAJJHRhZ19qc29uID0ganNvbl9kZWNvZGUoJHRhZ19jb250ZW50LHRydWUpOwovLyAJJHRhZ19tZW51ID0gJyc7Ci8vIAlmb3JlYWNoICgkdGFnX2pzb25bJ3Jlc3VsdCddIGFzICRrZXkgPT4gJHZhbHVlKSB7Ci8vIAkJJGh0dHBfaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKLy8gCQkkcGhwX3NlbGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsKLy8gIAkJJHRhZ19pdGVtX3VybD0naHR0cDovLycuJGh0dHBfaG9zdC4kcGhwX3NlbGYuJz9rZXlOYW1lPScudXJsZW5jb2RlKCR2YWx1ZVswXSk7Ci8vIAkJJHRhZ19tZW51ID0gJHRhZ19tZW51Lic8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJy4kdGFnX2l0ZW1fdXJsLiciPicuJHZhbHVlWzBdLic8L2E+JzsKLy8gCX0KLy8gCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVtOm1lbnVdJywkdGFnX21lbnUsJGRhdGEpOwovLyB9CgoKY2xhc3MgamRfYmVhbnsKCQoJcHVibGljICRjcmF3bF91cmwgPSAiaHR0cDovL2ltYWdlLnNvLmNvbS9qIjsKCXB1YmxpYyAkcXVlcnlfZGF0YTsKCXB1YmxpYyAkY29udGVudDsKCXB1YmxpYyAkdGl0bGU7CgoJLy/lrprkuYnmnoTpgKDlh73mlbDvvIznlKjkuo7liJ3lp4vljJbotYvlgLwKCS8vIHNlYXJjaF90eXBlPTAmX2lucHV0X2NoYXJzZXQ9dXRmLTgmbmF2aWdhdG9yPWFsbCZqc29uPW9uJnE9aXBob25lNuaJi+acuuWjswogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNyYXdsX3VybCwkcXVlcnlfZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+cXVlcnlfZGF0YSA9ICRxdWVyeV9kYXRhOyAgICAgICAgLy/ov5nph4zlt7Lnu4/kvb/nlKjkuoZ0aGlz5oyH6ZKI6K+t5Y+l4pGgCiAgICAgICAgJHRoaXMtPmNyYXdsX3VybCA9ICRjcmF3bF91cmw7IAogICAgfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRRdWVyeURhdGEoJHF1ZXJ5X2RhdGEpewoJCSR0aGlzLT5xdWVyeV9kYXRhID0gJHF1ZXJ5X2RhdGE7CgkJcmV0dXJuIHRydWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGxpc3RzKCl7CgkJJGFycl9saXN0ID0gYXJyYXkoKTsKCQl0cnkgewoJCQkkY29udGVudCA9ICR0aGlzLT5jb250ZW50OwoJCQkvLyBsaXN0Lmh0bWw/Y2F0PTY3MjgsNjc0Nyw2NzkyIiB0YXJnZXQ9Il9ibGFuayI+5a6J5YWo5bqn5qSFPC9hPgoJCQkkY29udGVudCA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJGNvbnRlbnQsICJVVEYtOCIsICJHQksiKTsgCgkJCS8vIHByaW50KCRjb250ZW50KTsKCQkJaWYocHJlZ19tYXRjaF9hbGwoJyhocmVmXFw9Imh0dHA6Ly9jYXRlZ29yeS5kYW5nZGFuZy5jb20vKFtBLVphLXowLTlcXC0vXFwuXSspLmh0bWwiKFtePl0qPyk+KFtcXHNcXFNdKz8pPC9hPiknLCAkY29udGVudCwgJG1hdGNoZXMpKXsKCQkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkJLy8gJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJCQkgZm9yZWFjaCgkbWF0Y2hlc1sxXSBhcyAkaT0+JGsxKXsKCQkJCSAgICRrMj0kbWF0Y2hlc1szXVskaV07CgkJCQkgICAvLyBlY2hvICIgJGsxICRrMiA8YnI+XG4iOwoJCQkJICAgJGFycl9saXN0W10gPSBhcnJheSgKCQkJCSAgIAkJIm5hbWUiPT4kazIsCgkJCQkgICAJCSJjYXQiPT4kazEsCgkJCQkgICApOwoJCQkJIH0KCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkKCQl9CgkJcmV0dXJuICRhcnJfbGlzdDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoKXsKCQkkaXRlbXMgPSBhcnJheSgpOwoJCXRyeSB7CgkJCSRjb250ZW50ID0gJHRoaXMtPmNvbnRlbnQ7CgkJCSRjb250ZW50ID0gbWJfY29udmVydF9lbmNvZGluZygkY29udGVudCwgIlVURi04IiwgIkdCSyIpOyAKCQkJLy8gcHJpbnQoJGNvbnRlbnQpOwoJCQlpZihwcmVnX21hdGNoX2FsbCgnKHRpdGxlXFw9IihbXj5dKz8pIihbXj5dKz8pY2xhc3M9InBpYyIoW14+XSs/KWhyZWZcXD0iaHR0cDovL3Byb2R1Y3QuZGFuZ2RhbmcuY29tLyhbMC05XSs/KVxcLmh0bWwpJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJCWZvcmVhY2goJG1hdGNoZXNbMV0gYXMgJGk9PiRrMSl7CgkJCQkgICAkazI9JG1hdGNoZXNbNF1bJGldOwoJCQkJICAgaWYoIXN0cmlzdHIoJGsyLCI8aW1nIikpewoJCQkJCSAgICRpdGVtc1tdID0gYXJyYXkoCgkJCQkJICAgCQkibmFtZSI9PiRrMSwKCQkJCQkgICAJCSJpZCI9PiRrMiwKCQkJCQkgICApOwoJCQkJICAgfQoJCQkJfQoJCQl9CgkJCWlmKHByZWdfbWF0Y2goJyg8dGl0bGU+KFtcXHNcXFNdKz8pPC90aXRsZT4pJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJCSR0aGlzLT50aXRsZSA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkJCQoJCX0KCQlyZXR1cm4gJGl0ZW1zOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpdGVtKCl7CgkJJGl0ZW0gPSBhcnJheSgpOwoJCXRyeSB7CgkJCSRjb250ZW50ID0gJHRoaXMtPmNvbnRlbnQ7CgkJCSRjb250ZW50ID0gbWJfY29udmVydF9lbmNvZGluZygkY29udGVudCwgIlVURi04IiwgIkdCSyIpOyAKCQkJLy8gcHJpbnQoJGNvbnRlbnQpOwoJCQkvLyBpZihwcmVnX21hdGNoX2FsbCgnKHNlbGwiIHRhcmdldFxcPSJfYmxhbmsiIGhyZWZcXD0iaHR0cDovL3Byb2R1Y3RcXC5zdW5pbmdcXC5jb20vKFtcXHNcXFNePl0rPylcXC5odG1sIiB0aXRsZVxcPSIoW1xcc1xcU14+XSs/KSIpJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCS8vIAkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJLy8gCWZvcmVhY2goJG1hdGNoZXNbMV0gYXMgJGk9PiRrMSl7CgkJCS8vIAkgICAkazI9JG1hdGNoZXNbMl1bJGldOwoJCQkvLyAJICAgJGl0ZW1zW10gPSBhcnJheSgKCQkJLy8gCSAgIAkJIm5hbWUiPT4kazIsCgkJCS8vIAkgICAJCSJpZCI9PiRrMSwKCQkJLy8gCSAgICk7CgkJCS8vIAl9CgkJCS8vIH1lbHNlIGlmKHByZWdfbWF0Y2hfYWxsKCcocHJvSW1nIGJsIGZsIHNlbGxQb2ludCIgdGl0bGVcXD0iKFtcXHNcXFNePl0rPykiIHRhcmdldD0iX2JsYW5rIiBocmVmXFw9Imh0dHA6Ly9wcm9kdWN0XFwuc3VuaW5nXFwuY29tLyhbXFxzXFxTXj5dKz8pXFwuaHRtbCIpJywgJGNvbnRlbnQsICRtYXRjaGVzKSl7CgkJCS8vIAkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJLy8gCWZvcmVhY2goJG1hdGNoZXNbMV0gYXMgJGk9PiRrMSl7CgkJCS8vIAkgICAkazI9JG1hdGNoZXNbMl1bJGldOwoJCQkvLyAJICAgJGl0ZW1zW10gPSBhcnJheSgKCQkJLy8gCSAgIAkJIm5hbWUiPT4kazEsCgkJCS8vIAkgICAJCSJpZCI9PiRrMiwKCQkJLy8gCSAgICk7CgkJCS8vIAl9CgkJCS8vIH0KCQkJaWYocHJlZ19tYXRjaCgnKDx0aXRsZT4oW1xcc1xcU10rPyk8L3RpdGxlPiknLCAkY29udGVudCwgJG1hdGNoZXMpKXsKCQkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkJJGl0ZW1bJ3RpdGxlJ10gPSB0cmltKCRtYXRjaGVzWzFdKTsKCQkJfQoJCQlpZihwcmVnX21hdGNoKCcobmFtZVxcPSJrZXl3b3JkcyIgY29udGVudFxcPSIoW1xcc1xcU10rPykiKScsICRjb250ZW50LCAkbWF0Y2hlcykpewoJCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCQkkaXRlbVsna2V5d29yZHMnXSA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCQl9CgkJCWlmKHByZWdfbWF0Y2goJyg8ZGl2IGNsYXNzXFw9InByb19jb250ZW50IihbXFxzXFxTXSs/KTxkaXYgaWRcXD0iY29tbWVudF9hbGwiKScsICRjb250ZW50LCAkbWF0Y2hlcykpewoJCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCQkkY29udGVudCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCQkJJGNvbnRlbnQgPXByZWdfcmVwbGFjZSgiLzxhW14+XSo+KC4qKTxcL2E+L2lzVSIsJyR7MX0nLCRjb250ZW50KTsKCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi88c2NyaXB0W1xzXFNdKj88XC9zY3JpcHQ+L2kiLCIiLCRjb250ZW50LDMpOwoJCQkJJGNvbnRlbnQgPXByZWdfcmVwbGFjZSgiLzwoaT9mcmFtZS4qPyk+KC4qPyk8KFwvaT9mcmFtZS4qPyk+L3NpIiwiIiwkY29udGVudCk7IC8v6L+H5rukZnJhbWXmoIfnrb4KCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi9ccysvIiwgIiAiLCAkY29udGVudCk7IC8v6L+H5ruk5aSa5L2Z5Zue6L2mCgkJCQkkY29udGVudCA9cHJlZ19yZXBsYWNlKCIvPChcLz9zdHlsZS4qPyk+L3NpIiwiIiwkY29udGVudCk7IC8v6L+H5rukc3R5bGXmoIfnrb4KCQkJCSRjb250ZW50ID1wcmVnX3JlcGxhY2UoIi88c2NyaXB0W1xzXFNdKj88XC9zY3JpcHQ+L2kiLCIiLCRjb250ZW50LDMpOwoJCQkJJGNvbnRlbnQgPXByZWdfcmVwbGFjZSgiLzxzY3JpcHRbXHNcU10qPzxcL3NjcmlwdD4vaSIsIiIsJGNvbnRlbnQsMyk7CgoJCQkJJGl0ZW1bJ2NvbnRlbnQnXSA9IHRyaW0oJGNvbnRlbnQpOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkJCQoJCX0KCQlyZXR1cm4gJGl0ZW07Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHF1ZXJ5KCl7CgkJdHJ5IHsKCQkJJHVybCAgPSAkdGhpcy0+Y3Jhd2xfdXJsLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCR0aGlzLT5xdWVyeV9kYXRhKTsKCQkJJHRoaXMtPmNvbnRlbnQgPSBjb3JlQXBwQ2FjaGU6Omh0dHBfdmlzaXQoJHVybCk7CgkJCS8vICR0aGlzLT5jb250ZW50ID0gaWNvbnYoIkdCSyIsICJVVEYtOC8vSUdOT1JFIiwgJHRoaXMtPmNvbnRlbnQpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkKCQl9CgkJLy8gcHJpbnQoJHRoaXMtPmNvbnRlbnQpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBrZXl3b3JkcygkcSl7CgkJdHJ5IHsKCQkJJGtleXdvcmRzX2xpc3QgPSBhcnJheSgpOwoJCQkkcXVlcnlfZGF0YSA9IGFycmF5KAoJICAgICAgICAJJ3dkJz0+JHEKCSAgICAgICAgCSwncCc9PiczJwoJICAgICAgICAJLCdpZSc9Pid1dGYtOCcKCSAgICAgICAgCSwnZnJvbSc9Pid3aXNlX3dlYicKCSAgICAgICAgKTsgICAgICAgIC8vCgkJCSR1cmwgPSAiaHR0cDovL20uYmFpZHUuY29tL3N1PyIuaHR0cF9idWlsZF9xdWVyeSgkcXVlcnlfZGF0YSk7CgkJCS8vICR1cmwgID0gJHRoaXMtPmNyYXdsX3VybC4nPycuaHR0cF9idWlsZF9xdWVyeSgkdGhpcy0+cXVlcnlfZGF0YSk7CgkJCSRjb250ZW50ID0gY29yZUFwcENhY2hlOjpodHRwX3Zpc2l0KCR1cmwpOwoJCQkkY29udGVudCA9IHN1YnN0cigkY29udGVudCwgc3RybGVuKCJ3aW5kb3cuYmFpZHUuc3VnKCIpKTsKCQkJJGNvbnRlbnQgPSBzdWJzdHIoJGNvbnRlbnQsIDAsc3RybGVuKCRjb250ZW50KS0yKTsKCQkJLy8gcHJpbnQoJGNvbnRlbnQpOwoKCQkJJGNvbnRlbnQgPSB0cmltKCRjb250ZW50KTsKCQkJJGJlaWdpbiA9ICBzdHJwb3MoJGNvbnRlbnQsInM6WyIpOwoJCQkkY29udGVudCA9IHN1YnN0cigkY29udGVudCwgJGJlaWdpbisyLHN0cmxlbigkY29udGVudCktMik7CgkJCSRlbmQgPSAgc3RycG9zKCRjb250ZW50LCJ9Iik7CgkJCS8vIHByaW50KCRlbmQpOwoJCQkkY29udGVudCA9IHN1YnN0cigkY29udGVudCwgMCwkZW5kKTsKCQkJLy8gcHJpbnQoJGNvbnRlbnQpOwoKCgkJCSRrZXl3b3Jkc19qc29uID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsdHJ1ZSk7CgkJCS8vIHByaW50X3IoJGtleXdvcmRzX2pzb24pOwoJCQlmb3JlYWNoICgka2V5d29yZHNfanNvbiBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCSAJCSRrZXl3b3Jkc19saXN0W10gPSAkdmFsdWU7CgkJIAkJLy8gZWNobyAkdmFsdWU7CgkJIAl9CgkJIAkvLyBlY2hvICIzMzMzIjsKCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJLy8gZWNobyAiMzMzMyI7CgkJLy8gCWVjaG8gImdldE1lc3NhZ2XvvJoiLiRlLT5nZXRNZXNzYWdlKCk7Ly9FeGNlcHRpb24oKeeahOezu+e7n+aWueazleiOt+WPluW8guW4uOS/oeaBryAKCSAvLyBlY2hvICJnZXRGaWxl77yaIi4kZS0+Z2V0RmlsZSgpOy8vRXhjZXB0aW9uKCnnmoTns7vnu5/mlrnms5Xojrflj5blvILluLjmlofku7blkI0gCgkgLy8gZWNobyAiZ2V0TGluZe+8miIuJGUtPmdldExpbmUoKTsvL0V4Y2VwdGlvbigp55qE57O757uf5pa55rOV6I635Y+W5byC5bi46KGM5pWwIAoJCX0KCQlyZXR1cm4gJGtleXdvcmRzX2xpc3Q7CgkJLy8gcHJpbnQoJHRoaXMtPmNvbnRlbnQpOwoJfQoKfQoKCmNsYXNzIGNvcmVBcHBDYWNoZXsKCQoJcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRmaWxlLCRmaWxlbmFtZSl7CgkJcmV0dXJuIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSxzZWxmOjplbmNvZGUoJGZpbGUpKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gd3JpdGVub2NvZGUoJGZpbGUsJGZpbGVuYW1lKXsKCQlyZXR1cm4gZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRmaWxlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVhZCgkZmlsZW5hbWUpewoJCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKCQlpZihzdHJpc3RyKCRjb250ZW50LCI8L2V4cGxvZGU+IikpewoJCQkkY29udGVudCA9IHNlbGY6OmN1dCgkY29udGVudCwiPGV4cGxvZGU+IiwiPC9leHBsb2RlPiIpOwoJCX0KCQlyZXR1cm4gc2VsZjo6ZGVjb2RlKCRjb250ZW50KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVhZG5vY29kZSgkZmlsZW5hbWUpewoJCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKCQlpZihzdHJpc3RyKCRjb250ZW50LCI8L2V4cGxvZGU+IikpewoJCQkkY29udGVudCA9IHNlbGY6OmN1dCgkY29udGVudCwiPGV4cGxvZGU+IiwiPC9leHBsb2RlPiIpOwoJCX0KCQlyZXR1cm4gJGNvbnRlbnQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJlYWRQaHBDb2RlKCRmaWxlbmFtZSwkYWRkX2NvbnRlbnQxLCRhZGRfY29udGVudDIpewoJCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKCQlpZihzdHJpc3RyKCRjb250ZW50LCI8Ii4iP3BocCIpKXsKCQkJJGNvbnRlbnQgPSBzZWxmOjpjdXQoJGNvbnRlbnQsIjw/Ii4icGhwIiwiPyIuIj4iKTsKCQl9CgkJaWYoIWVtcHR5KCRhZGRfY29udGVudDEpKXsKCQkJJGNvbnRlbnQgPSAkYWRkX2NvbnRlbnQxLiRjb250ZW50OwoJCX0KCQlpZighZW1wdHkoJGFkZF9jb250ZW50MikpewoJCQkkY29udGVudCA9ICRjb250ZW50LiRhZGRfY29udGVudDI7CgkJfQoJCXJldHVybiAkY29udGVudDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCRmaWxlKXsKCQlyZXR1cm4gYmFzZTY0X2VuY29kZShnemNvbXByZXNzKHNlcmlhbGl6ZSgkZmlsZSkpKTsgCgl9CgoJcHVibGljIGZ1bmN0aW9uIGRlY29kZSgkZmlsZSl7CgkJcmV0dXJuIHVuc2VyaWFsaXplKGd6dW5jb21wcmVzcyhiYXNlNjRfZGVjb2RlKCRmaWxlKSkpOyAKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGN1dCgkZmlsZSwkZnJvbSwkZW5kKQoJeyAKCQkkbWVzc2FnZT1leHBsb2RlKCRmcm9tLCRmaWxlKTsgCgkJJG1lc3NhZ2U9ZXhwbG9kZSgkZW5kLCRtZXNzYWdlWzFdKTsgCgkJcmV0dXJuICAgJG1lc3NhZ2VbMF07Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJuZFN0cigkbGVuZ3RoPTgpewoJCSRzdHIgPSBudWxsOwoJCSRzdHJQb2wgPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKCQkkbWF4ID0gc3RybGVuKCRzdHJQb2wpLTE7CgkJZm9yKCRpPTA7JGk8JGxlbmd0aDskaSsrKXsKCQkJJHN0ci49JHN0clBvbFtyYW5kKDAsJG1heCldOwoJCX0KCQlyZXR1cm4gJHN0cjsKCX0KCgkvL+i/h+a7pOeahOaVj+aEn+ivjQoJcHVibGljIGZ1bmN0aW9uIGtpbGxfaWxsZWdhbGtleXMoJHN0cil7CgkJJGFycl9raWxsX2tleXMgPWFycmF5KCfliIAnLCfmnqonLCfljJXpppYnLCflvZPlvZMnKTsgICAgICAgICAgIC8v6KaB6L+H5ruk55qE5pWP5oSf6K+NIOWbveWGheeUqOaIt+W/hemhu+i/h+a7pAoJCXJldHVybiBzdHJfcmVwbGFjZSgkYXJyX2tpbGxfa2V5cywnICcsJHN0cik7Cgl9CgoJLy/mlbDlrZfnroDljZXliqDlr4YKCXB1YmxpYyBmdW5jdGlvbiBlbmNvZGVfaWQoJGlkLCRudW1iZXIpIHsKCQkkbWl3ZW4gPSAoJG51bWJlcj09MCk/JGlkOigkbnVtYmVyLiRpZCk7CgkJcmV0dXJuICRtaXdlbjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZGVjb2RlX2lkKCRtaXdlbiwkbnVtYmVyKSB7CgkJJGlkID0gKCRudW1iZXI9PTApPyRtaXdlbjpzdWJzdHIoJG1pd2VuLHN0cmxlbigkbnVtYmVyKSk7CgkJcmV0dXJuICRpZDsKCX0KCgkvL+aVsOWtl+eugOabv+aNouaIkOWtl+avjQoJcHVibGljIGZ1bmN0aW9uIHRvX2FiYygkbnVtKXsKCQkkbiA9YXJyYXkoJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJzAnKTsKCQkkcyA9YXJyYXkoJ2wnLCdrJywnaicsJ2gnLCdtJywnbicsJ3YnLCdjJywnZScsJ2knKTsKCQlyZXR1cm4gc3RyX3JlcGxhY2UoJG4sJHMsJG51bSk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gdG9fMTIzKCRzdHIpewoJCSRuID1hcnJheSgnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnMCcpOwoJCSRzID1hcnJheSgnbCcsJ2snLCdqJywnaCcsJ20nLCduJywndicsJ2MnLCdlJywnaScpOwoJCXJldHVybiBzdHJfcmVwbGFjZSgkcywkbiwkc3RyKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaHR0cF92aXNpdCgkd2VidXJsKSB7CiAgICAJJHVzZXJfYWdlbnQgPSAiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTBfNSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ1LjAuMjQ1NC44NSBTYWZhcmkvNTM3LjM2IFFRQnJvd3Nlci8zLjkuMzk0My40MDAiOwogICAgICAgICRyZW1vdGVfZGF0YSA9IE5VTEw7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9leGVjJykpIHsKICAgICAgICAgICAgJGN1cmwgPSBAY3VybF9pbml0KCk7CiAgICAgICAgICAgIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR3ZWJ1cmwpOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLCAwKTsKICAgICAgICAgICAgQGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAzMCk7CiAgICAgICAgICAgIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgICAgIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR1c2VyX2FnZW50KTsgCiAgICAgICAgICAgIC8vIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9FTkNPRElORywgIkdCSyIpOwogICAgICAgICAgICAvLyBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVGRVJFUiwnaHR0cDovL3B1Yi5hbGltYW1hLmNvbS9wcm9tby9zZWFyY2gvaW5kZXguaHRtP3E9a2slRTglQTMlQTQlRTUlQUQlOTAmX3Q9MTQ1NzAwNTIyNjIxMycpOwogICAgICAgICAgICAkcmVtb3RlX2RhdGEgPSBAY3VybF9leGVjKCRjdXJsKTsKICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGN1cmwpOwogICAgICAgICAgICAvLyBwcmludCgnY3VybF9leGVjJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3RyZWFtX2NvbnRleHRfY3JlYXRlJykpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJfYXJyYXkgPSBhcnJheSgnaHR0cCcgPT4gYXJyYXkoJ21ldGhvZCcgPT4gJ0dFVCcsICd0aW1lb3V0JyA9PiAzMCkpOwogICAgICAgICAgICAgICAgJGh0dHBfaGVhZGVyID0gQHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkaGVhZGVyX2FycmF5KTsKICAgICAgICAgICAgICAgICRyZW1vdGVfZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkd2VidXJsLCBmYWxzZSwgJGh0dHBfaGVhZGVyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZW1wX3VybCA9IGV4cGxvZGUoIi8iLCAkd2VidXJsKTsKICAgICAgICAgICAgICAgICRuZXdfdXJsID0gJHRlbXBfdXJsWzJdOwogICAgICAgICAgICAgICAgJGh0dHBfcG9ydCA9IDgwOwogICAgICAgICAgICAgICAgJGdldF9maWxlID0gc3Vic3RyKCR3ZWJ1cmwsIHN0cmxlbigkbmV3X3VybCkgKyA3KTsKICAgICAgICAgICAgICAgIGlmIChzdHJzdHIoJG5ld191cmwsIGNocig1OCkpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNfdmFyX2FycmF5Wyd0ZCddID0gZXhwbG9kZShjaHIoNTgpLCAkbmV3X3VybCk7CiAgICAgICAgICAgICAgICAgICAgJG5ld191cmwgPSAkc192YXJfYXJyYXlbJ3RkJ11bMF07CiAgICAgICAgICAgICAgICAgICAgJGh0dHBfcG9ydCA9ICRzX3Zhcl9hcnJheVsndGQnXVsxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRmc29ja19yZXN1bHQgPSBAZnNvY2tvcGVuKCRuZXdfdXJsLCAkaHR0cF9wb3J0KTsKICAgICAgICAgICAgICAgIEBmcHV0cygkZnNvY2tfcmVzdWx0LCAnR0VUICcgLiAkZ2V0X2ZpbGUgLiAnIEhUVFAvMS4xJyAuICJcclxuIiAuICdIb3N0OicgLiAkbmV3X3VybCAuICJcclxuIiAuICdDb25uZWN0aW9uOkNsb3NlJyAuICJcclxuXHJcbiIpOwogICAgICAgICAgICAgICAgd2hpbGUgKCFmZW9mKCRmc29ja19yZXN1bHQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlbW90ZV9kYXRhIC49IGZnZXRzKCRmc29ja19yZXN1bHQsIDEwMjQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnNvY2tfcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlbW90ZV9kYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lKCkgCgl7IAoJCSRTZXJ2ZXJOYW1lID0gc3RydG9sb3dlcigkX1NFUlZFUlsnU0VSVkVSX05BTUUnXT8kX1NFUlZFUlsnU0VSVkVSX05BTUUnXTokX1NFUlZFUlsnSFRUUF9IT1NUJ10pOyAKCQlpZiggc3RycG9zKCRTZXJ2ZXJOYW1lLCdodHRwOi8vJykgKSAKCQl7IAoJCQlyZXR1cm4gc3RyX3JlcGxhY2UoJ2h0dHA6Ly8nLCcnLCRTZXJ2ZXJOYW1lKTsgCgkJfSAKCQlyZXR1cm4gJFNlcnZlck5hbWU7IAoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjbGllbnRJcCgpewoJCWlmKGdldGVudignSFRUUF9DTElFTlRfSVAnKSAmJiBzdHJjYXNlY21wKGdldGVudignSFRUUF9DTElFTlRfSVAnKSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSBnZXRlbnYoJ0hUVFBfQ0xJRU5UX0lQJyk7CgkJfSBlbHNlaWYoZ2V0ZW52KCdIVFRQX1hfRk9SV0FSREVEX0ZPUicpICYmIHN0cmNhc2VjbXAoZ2V0ZW52KCdIVFRQX1hfRk9SV0FSREVEX0ZPUicpLCAndW5rbm93bicpKSB7CgkJCSRvbmxpbmVpcCA9IGdldGVudignSFRUUF9YX0ZPUldBUkRFRF9GT1InKTsKCQl9IGVsc2VpZihnZXRlbnYoJ1JFTU9URV9BRERSJykgJiYgc3RyY2FzZWNtcChnZXRlbnYoJ1JFTU9URV9BRERSJyksICd1bmtub3duJykpIHsKCQkJJG9ubGluZWlwID0gZ2V0ZW52KCdSRU1PVEVfQUREUicpOwoJCX0gZWxzZWlmKGlzc2V0KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSAmJiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSAmJiBzdHJjYXNlY21wKCRfU0VSVkVSWydSRU1PVEVfQUREUiddLCAndW5rbm93bicpKSB7CgkJCSRvbmxpbmVpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoJCX0KCQlwcmVnX21hdGNoKCIvW1xkXC5dezcsMTV9LyIsICRvbmxpbmVpcCwgJG9ubGluZWlwbWF0Y2hlcyk7CgkJJG9ubGluZWlwID0gJG9ubGluZWlwbWF0Y2hlc1swXSA/ICRvbmxpbmVpcG1hdGNoZXNbMF0gOiAndW5rbm93bic7CgkJdW5zZXQoJG9ubGluZWlwbWF0Y2hlcyk7CgkJcmV0dXJuICRvbmxpbmVpcDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNBbGxvd2RJcCgkYWxsb3dfaXApewoJCSRpcCA9IHNlbGY6OmNsaWVudElwKCk7CgkJJG5vbl9saXN0ID0gZXhwbG9kZSgifCIsJGFsbG93X2lwKTsKCQlmb3JlYWNoKCRub25fbGlzdCBhcyAkaXBsaXN0KXsKCQkJaWYoQHN0cmlzdHIoJGlwLCRpcGxpc3QpKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvL+WKoOWvhue/u+i9rOWtl+espgoJcHVibGljIGZ1bmN0aW9uIGVuY29kZV9zdHJyZXYoJGZpbGUpewoJCXJldHVybiBzdHJyZXYoYmFzZTY0X2VuY29kZSgkZmlsZSkpOyAKCX0KCS8v57+76L2s6Kej5a+G5a2X56ymCglwdWJsaWMgZnVuY3Rpb24gZGVjb2RlX3N0cnJldigkZmlsZSl7CgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RycmV2KCRmaWxlKSk7IAoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZW9fcGljKCRpdGVtX3BpY3RVcmwsJGNvbmZpZ19pdGVtLCRob3N0X2l0ZW0sJGRvbWFpblVybCl7CgkJJHNlb3BpYyA9ICRpdGVtX3BpY3RVcmw7CgkJaWYoIWVtcHR5KCRpdGVtX3BpY3RVcmwpKXsKCQkJJGhvc3Rfc2VvcGljID0gJGhvc3RfaXRlbVsndXJsX3Nlb19waWMnXTsKCQkJJGl0ZW1fcGljdFVybF9iYXNlNjQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3BpY3RVcmwpOwoJCQkkaXRlbV9waWN0VXJsX2Jhc2U2NF9yZXYgPSBzZWxmOjplbmNvZGVfc3RycmV2KCRpdGVtX3BpY3RVcmwpOwoJCQlldmFsKCJcJHNlb3BpYyA9IFwiJGhvc3Rfc2VvcGljXCI7Iik7CgkJfQoJCXJldHVybiAkc2VvcGljOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZW8oJGl0ZW1zLCRjb25maWdfaXRlbSwkaG9zdF9pdGVtLCRkb21haW5VcmwpewoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zKSl7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJGl0ZW1fcGljdFVybCA9ICR2YWx1ZVsncGljdXJsJ107CgkJCQlpZighZW1wdHkoJGl0ZW1fcGljdFVybCkpewoJCQkJCSRob3N0X3Nlb3BpYyA9ICRob3N0X2l0ZW1bJ3VybF9zZW9fcGljJ107CgkJCQkJJGl0ZW1fcGljdFVybF9iYXNlNjQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3BpY3RVcmwpOwoJCQkJCSRpdGVtX3BpY3RVcmxfYmFzZTY0X3JldiA9IHNlbGY6OmVuY29kZV9zdHJyZXYoJGl0ZW1fcGljdFVybCk7CgkJCQkJZXZhbCgiXCRzZW9waWMgPSBcIiRob3N0X3Nlb3BpY1wiOyIpOwoJCQkJCSR2YWx1ZVsnc2VvcGljJ10gPSAkc2VvcGljOwoJCQkJfQoKCQkJCSRpdGVtX3VybCA9ICR2YWx1ZVsndXJsJ107CgkJCQlpZighZW1wdHkoJGl0ZW1fdXJsKSl7CgkJCQkJJGhvc3Rfc2VvX2l0ZW1fdXJsID0gJGhvc3RfaXRlbVsndXJsX3Nlb19pdGVtJ107CgkJCQkJJGl0ZW1fdXJsX2Jhc2U2NCA9IGJhc2U2NF9lbmNvZGUoJGl0ZW1fdXJsKTsKCQkJCQkkaXRlbV91cmxfYmFzZTY0X3JldiA9IHNlbGY6OmVuY29kZV9zdHJyZXYoJGl0ZW1fdXJsKTsKCQkJCQlldmFsKCJcJHNlb19pdGVtX3VybCA9IFwiJGhvc3Rfc2VvX2l0ZW1fdXJsXCI7Iik7CgkJCQkJJHZhbHVlWydzZW9fdXJsJ10gPSAkc2VvX2l0ZW1fdXJsOwoKCQkJCQkkdmFsdWVbJ2Jhc2VfdXJsJ10gPSAkaXRlbV91cmxfYmFzZTY0OwoJCQkJfQoKCQkJCSRpdGVtc19uZXdzW10gPSAkdmFsdWU7CgkJCX0KCQl9CgkJcmV0dXJuICRpdGVtc19uZXdzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZW9fc2hvdygkaXRlbXMsJGNvbmZpZ19pdGVtLCRob3N0X2l0ZW0sJGRvbWFpblVybCl7CgkJJGl0ZW1zX25ld3MgPSBhcnJheSgpOwoJCWlmKCFlbXB0eSgkaXRlbXMpKXsKCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkkaXRlbV9waWN0VXJsID0gJHZhbHVlWydwaWNfdXJsJ107CgkJCQlpZighZW1wdHkoJGl0ZW1fcGljdFVybCkpewoJCQkJCSRob3N0X3Nlb3BpYyA9ICRob3N0X2l0ZW1bJ3VybF9zZW9fcGljJ107CgkJCQkJJGl0ZW1fcGljdFVybF9iYXNlNjQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3BpY3RVcmwpOwoJCQkJCSRpdGVtX3BpY3RVcmxfYmFzZTY0X3JldiA9IHNlbGY6OmVuY29kZV9zdHJyZXYoJGl0ZW1fcGljdFVybCk7CgkJCQkJZXZhbCgiXCRzZW9waWMgPSBcIiRob3N0X3Nlb3BpY1wiOyIpOwoJCQkJCSR2YWx1ZVsnc2VvcGljJ10gPSAkc2VvcGljOwoJCQkJfQoJCQkJJHZhbHVlWyd0aXRsZSddID0gJHZhbHVlWyduYW1lJ107CgkJCQkvLyAkaXRlbV91cmwgPSAkdmFsdWVbJ3VybCddOwoJCQkJLy8gaWYoIWVtcHR5KCRpdGVtX3VybCkpewoJCQkJLy8gCSRob3N0X3Nlb19pdGVtX3VybCA9ICRob3N0X2l0ZW1bJ3VybF9zZW9faXRlbSddOwoJCQkJLy8gCSRpdGVtX3VybF9iYXNlNjQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3VybCk7CgkJCQkvLyAJJGl0ZW1fdXJsX2Jhc2U2NF9yZXYgPSBzZWxmOjplbmNvZGVfc3RycmV2KCRpdGVtX3VybCk7CgkJCQkvLyAJZXZhbCgiXCRzZW9faXRlbV91cmwgPSBcIiRob3N0X3Nlb19pdGVtX3VybFwiOyIpOwoJCQkJLy8gCSR2YWx1ZVsnc2VvX3VybCddID0gJHNlb19pdGVtX3VybDsKCQkJCS8vIH0KCgkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2VvX2NhdGUoJGl0ZW1zLCRjb25maWdfaXRlbSwkaG9zdF9pdGVtLCRkb21haW5VcmwpewoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zKSl7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJJGl0ZW1fY2F0ZWdvcnlfaWQgPSAkdmFsdWVbJ2NhdGVnb3J5X2lkJ107CgkJCQkkaXRlbV9uYW1lID0gJHZhbHVlWyduYW1lJ107CgkJCQkkaXRlbV9jYXRlZ29yeV9weSA9IENVdGY4X1BZOjplbmNvZGUoJGl0ZW1fbmFtZSwgJ2FsbCcpOwoKCQkJCSR0ZW1wX251bV9jaWQgPSBzZWxmOjplbmNvZGVfaWQoJGl0ZW1fY2F0ZWdvcnlfaWQsJGhvc3RfaXRlbVsnaGlkJ10pOwoJCQkJJHRlbXBfc3RyX2NpZCA9IHNlbGY6OnRvX2FiYygkdGVtcF9udW1fY2lkKTsKCgkJCQkkdXJsX3Nlb19jYXRlZ29yeSA9ICRob3N0X2l0ZW1bJ3VybF9zZW9fY2F0ZWdvcnknXTsKCQkJCS8vICR0ZW1wX251bV9jaWQgPSBiYXNlNjRfZW5jb2RlKCRpdGVtX3BpY3RVcmwpOwoJCQkJLy8gJGl0ZW1fcGljdFVybF9iYXNlNjRfcmV2ID0gc2VsZjo6ZW5jb2RlX3N0cnJldigkaXRlbV9waWN0VXJsKTsKCQkJCWV2YWwoIlwkdXJsID0gXCIkdXJsX3Nlb19jYXRlZ29yeVwiOyIpOwoJCQkJJHZhbHVlWyd1cmwnXSA9ICR1cmw7CgoJCQkJJGl0ZW1zX25ld3NbXSA9ICR2YWx1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gJGl0ZW1zX25ld3M7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJhbmRpdGVtcygkaXRlbXMsJGNvdW50KXsKCQkkaXRlbXNfbmV3cyA9IGFycmF5KCk7CgkJaWYoIWVtcHR5KCRpdGVtcykpewoJCQlzaHVmZmxlKCRpdGVtcyk7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJaWYoJGNvdW50PjApewoJCQkJCSRjb3VudC0tOwoJCQkJCSRpdGVtc19uZXdzW10gPSAkdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRpdGVtc19uZXdzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBtZXJnZV9pdGVtcygkaXRlbXNfaW5kZXgsJGl0ZW1zX2FkZCwkY291bnQpewoJCSRpdGVtc19uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGl0ZW1zX2FkZCkpewoJCQlmb3JlYWNoICgkaXRlbXNfYWRkIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQlpZihjb3VudCgkaXRlbXNfbmV3cyk8JGNvdW50KXsKCQkJCQkkaXRlbXNfbmV3c1skdmFsdWVbJ3VybCddXSA9ICR2YWx1ZTsKCQkJCX0KCQkJfQoJCX0KCQlpZighZW1wdHkoJGl0ZW1zX2luZGV4KSl7CgkJCWZvcmVhY2ggKCRpdGVtc19pbmRleCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJaWYoY291bnQoJGl0ZW1zX25ld3MpPCRjb3VudCl7CgkJCQkJJGl0ZW1zX25ld3NbJHZhbHVlWyd1cmwnXV0gPSAkdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRpdGVtc19uZXdzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBtZXJnZV92YWx1ZSgkaXRlbXNfaW5kZXgsJGl0ZW1zX2FkZCl7CgkJJGl0ZW1zX25ld3MgPSBhcnJheSgpOwoJCWlmKCFlbXB0eSgkaXRlbXNfaW5kZXgpKXsKCQkJZm9yZWFjaCAoJGl0ZW1zX2luZGV4IGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkkaXRlbXNfbmV3c1tdID0gJHZhbHVlOwoJCQl9CgkJfQoJCWlmKCFlbXB0eSgkaXRlbXNfYWRkKSl7CgkJCWZvcmVhY2ggKCRpdGVtc19hZGQgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCSRpdGVtc19uZXdzW10gPSAkdmFsdWU7CgkJCX0KCQl9CgkJJGl0ZW1zX25ld3MgPSBhcnJheV91bmlxdWUoJGl0ZW1zX25ld3MpOwoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsVXJsKCR1cmxhbGwpewoJCSR1cmwgPSBwYXJzZV91cmwoJHVybGFsbCk7CgkJcmV0dXJuICR1cmxbJ2hvc3QnXTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmV0Y2hJZCgkdXJsKXsKCQkkaWQ9Jyc7CgkJaWYocHJlZ19tYXRjaCgnKFxcPy8oWzAtOV0rKS8oW1xcc1xcU10qKSknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oWzAtOV0rKVxcLmh0bWwpJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vKFthLXpdKylcXC5odG1sKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbMC05XSspXFwucGhwKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbYS16XSspXFwucGhwKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbMC05XSspXFwuYXNwKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbYS16XSspXFwuYXNwKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbMC05XSspLyknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1sxXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oW0EtWmEtejAtOV0rKS8oW2Etel0rKS8pJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMl0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vKFtBLVphLXowLTldKykvKFswLTldKykvKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzJdKTsKCQl9CgkJZWxzZSBpZihwcmVnX21hdGNoKCcoXFw/LyhbQS1aYS16MC05XSspLShbQS1aYS16MC05XSspLyknLCAkdXJsLCAkbWF0Y2hlcykpewoJCQkvLyBwcmludF9yKCRtYXRjaGVzKTsKCQkJJGlkID0gdHJpbSgkbWF0Y2hlc1syXSk7CgkJfQoJCWVsc2UgaWYocHJlZ19tYXRjaCgnKFxcPy8oW2Etel0rKS8pJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCX0KCQllbHNlIGlmKHByZWdfbWF0Y2goJyhcXD8vW14tXSstKFtBLVphLXowLTldKykvKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCS8vIHByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzJdKTsKCQl9CgkJcmV0dXJuICRpZDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmV0Y2hOYW1lSWQoJHVybCwkZmllbGROYW1lKXsKCQkkaWQ9Jyc7CgkJLy8gcHJpbnQoJHVybCk7CgkJaWYocHJlZ19tYXRjaCgnKFxcPycuJGZpZWxkTmFtZS4nXFw9KFswLTldKykpJywgJHVybCwgJG1hdGNoZXMpKXsKCQkJLy8gcHJpbnRfcigkbWF0Y2hlcyk7CgkJCSRpZCA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCX0KCQkvLyBwcmludCgkaWQpOwoJCXJldHVybiAkaWQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGZldGNoTmFtZUFsbCgkdXJsLCRmaWVsZE5hbWUpewoJCSRpZD0nJzsKCQkvLyBwcmludCgkdXJsKTsKCQlpZihwcmVnX21hdGNoKCcoJy4kZmllbGROYW1lLidcXD0oW1xcc1xcU14mXSspKScsICR1cmwsICRtYXRjaGVzKSl7CgkJCXByaW50X3IoJG1hdGNoZXMpOwoJCQkkaWQgPSB0cmltKCRtYXRjaGVzWzFdKTsKCQl9CgkJLy8gcHJpbnQoJGlkKTsKCQlyZXR1cm4gJGlkOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnRMaXN0KCl7CgkJJGFycl9hZ2VudCA9IGFycmF5KCdHb29nbGUnLCdZYWhvbycsJ0JhaWR1c3BpZGVyJywnWW9kYW9Cb3QnLCdTb3Nvc3BpZGVyJywnc29nb3UnLCdNU05Cb3QnLCczNjBTcGlkZXInLCdiaW5nYm90JywnQ3Jhd2wnLCdBbGwnLCd5YW5kZXgnLCdFYXNvdVNwaWRlcicsJ0h1YXdlaVN5bWFudGVjU3BpZGVyJyk7CgkJcmV0dXJuICRhcnJfYWdlbnQ7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgkdXNlcl9hZ2VudCl7CgkJaWYoIWVtcHR5KCR1c2VyX2FnZW50KSl7CgkJCSRhcnJfYWdlbnQgPSBzZWxmOjpnZXRVc2VyQWdlbnRMaXN0KCk7CgkJCWZvcmVhY2ggKCRhcnJfYWdlbnQgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmKHN0cmlwb3MoJHVzZXJfYWdlbnQsJHZhbHVlKSE9PSBmYWxzZSl7CgkJCQkJcmV0dXJuICR2YWx1ZTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJyc7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHRvTmV3VXJsKCRrZXl3b3Jkc19pdGVtLCR4dWhhbywkcHJlLCRrZXlOYW1lKXsKCQkka2lkID0gJGtleXdvcmRzX2l0ZW1bJ2tleXdvcmRzX2lkJ107CgkJJGtzdHJJZCA9IHNlbGY6OnRvX2FiYygka2lkKTsKCQkkbWQ1ID0gbWQ1KCRwcmUuJ18nLiRrc3RySWQpOwoJCSRwcmVfdXJsID0gc3Vic3RyKCRtZDUsMCw1KTsKCQlpZigkeHVoYW89PTApewoJCQkkeHVoYW8gPSByYW5kKDEsMTIpOwoJCX0KCQlpZigkeHVoYW8+MTEpewoJCQkkeHVoYW8gPSAkeHVoYW8lMTI7CgkJfQoJCWlmKCR4dWhhbz09MCl7CgkJCSR1cmwgPSAka3N0cklkLiIuaHRtbCI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT0xKXsKCQkJJHVybCA9ICRraWQuIi5odG1sIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTIpewoJCQkkdXJsID0gJGtzdHJJZC4iLmh0bWwiOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09Myl7CgkJCSR1cmwgPSAka2lkLiIucGhwIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTQpewoJCQkkdXJsID0gJGtzdHJJZC4iLnBocCI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT01KXsKCQkJJHVybCA9ICRraWQuIi5hc3AiOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09Nil7CgkJCSR1cmwgPSAka3N0cklkLiIuYXNwIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTUpewoJCQkkdXJsID0gJGtpZC4iLyI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT02KXsKCQkJJHVybCA9ICRrc3RySWQuIi8iOwoJCX0KCQllbHNlIGlmKCR4dWhhbz09Nyl7CgkJCSR1cmwgPSAkcHJlX3VybC4iLyIuJGtpZC4iLyI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT04KXsKCQkJJHVybCA9ICRwcmVfdXJsLiIvIi4ka3N0cklkLiIvIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTkpewoJCQkkcHJlX3VybCA9IHN1YnN0cigkbWQ1LDYsNSk7CgkJCSR1cmwgPSAkcHJlX3VybC4iLSIuJGtpZC4iLyI7CgkJfQoJCWVsc2UgaWYoJHh1aGFvPT0xMCl7CgkJCSRwcmVfdXJsID0gc3Vic3RyKCRtZDUsNiw1KTsKCQkJJHVybCA9ICRwcmVfdXJsLiItIi4ka3N0cklkLiIvIjsKCQl9CgkJZWxzZSBpZigkeHVoYW89PTExKXsKCQkJJHVybCA9ICRraWQuIi8iLiRrZXlOYW1lOwoJCX0KCQllbHNlewoJCQkkdXJsID0gJGtzdHJJZC4iLmh0bWwiOwoJCX0KCQlyZXR1cm4gJHVybDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2hvd19pdGVtcygkYXJyX2hvc3QsJGNvbmYpewoJCSRhcnJfaG9zdF9uZXdzID0gYXJyYXkoKTsKCQlpZighZW1wdHkoJGFycl9ob3N0KSl7CgkJCWZvcmVhY2ggKCRhcnJfaG9zdCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJaWYoJHZhbHVlWydzaG93J10hPT1mYWxzZSl7CgkJCQkJaWYoIWVtcHR5KCRjb25mKSl7CgkJCQkJCWlmKCR2YWx1ZVsnY29uZiddPT0kY29uZil7CgkJCQkJCQkkYXJyX2hvc3RfbmV3c1tdID0gJHZhbHVlOwoJCQkJCQl9CgkJCQkJfWVsc2V7CgkJCQkJCSRhcnJfaG9zdF9uZXdzW10gPSAkdmFsdWU7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkYXJyX2hvc3RfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcGFyc2VfdXJsKCR1cmwsJGtleU5hbWUpewoJCSRhcnIgPSBwYXJzZV91cmwoJHVybCk7CgkJJHF1ZXJ5UGFydHMgPSBleHBsb2RlKCcmJywgJGFyclsncXVlcnknXSk7CgkJJHBhcmFtcyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHF1ZXJ5UGFydHMgYXMgJHBhcmFtKXsKCQkJJGl0ZW0gPSBleHBsb2RlKCc9JywgJHBhcmFtKTsKCQkJJHBhcmFtc1skaXRlbVswXV0gPSAkaXRlbVsxXTsKCQl9CgkJcmV0dXJuICRwYXJhbXNbJGtleU5hbWVdOwoJfSAKCglwdWJsaWMgZnVuY3Rpb24gbWVyZ2VfdXJsKCRpdGVtcywkdXJsKXsKCQkkaXRlbXNfdXJscyA9IGFycmF5KCk7CgkJJGl0ZW1zX25ld3MgPSBhcnJheSgpOwoJCWlmKCFlbXB0eSgkaXRlbXMpKXsKCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQlpZiAoIWluX2FycmF5KCR2YWx1ZVsndXJsJ10sICRpdGVtc191cmxzKSkgewoJCQkJCSRpdGVtc19uZXdzW10gPSAkdmFsdWU7CgkJCQkJJGl0ZW1zX3VybHNbXSA9ICR2YWx1ZVsndXJsJ107CgkJCQl9CgkJCX0KCQl9CgkJaWYoIWVtcHR5KCR1cmwpKXsKCQkJaWYgKCFpbl9hcnJheSgkdXJsLCAkaXRlbXNfdXJscykpIHsKCQkJCSRpdGVtc19uZXdzW10gPSBhcnJheSgKCQkJCQkidXJsIj0+JHVybAoJCQkJKTsKCQkJCSRpdGVtc191cmxzW10gPSAkdXJsOwoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXNfbmV3czsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lTGlzdCgpewoJCSRhcnJfY2xhc3NOYW1lID0gYXJyYXkoJ2pkJyk7CgkJcmV0dXJuICRhcnJfY2xhc3NOYW1lOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRSYW5kb21DbGFzc05hbWUoKXsKCQkkYXJyX2NsYXNzTmFtZSA9IHNlbGY6OmdldENsYXNzTmFtZUxpc3QoKTsKCQlpZighZW1wdHkoJGFycl9jbGFzc05hbWUpKXsKCQkJcmV0dXJuICRhcnJfY2xhc3NOYW1lW3JhbmQoMCxjb3VudCgkYXJyX2NsYXNzTmFtZSktMSldOwoJCX0KCQlyZXR1cm4gJ2pkJzsKCX0KCn0KCgoK