# mem_public_article v0.1 # Create/edit articles from the public side of a site. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE4OiJtZW1fcHVibGljX2FydGljbGUiO3M6NzoidmVyc2lv biI7czozOiIwLjEiO3M6NjoiYXV0aG9yIjtzOjE0OiJNaWNoYWVsIE1hbmZyZSI7czoxMDoi YXV0aG9yX3VyaSI7czoxODoiaHR0cDovL21hbmZyZS5uZXQvIjtzOjExOiJkZXNjcmlwdGlv biI7czo1MjoiQ3JlYXRlL2VkaXQgYXJ0aWNsZXMgZnJvbSB0aGUgcHVibGljIHNpZGUgb2Yg YSBzaXRlLiI7czo0OiJ0eXBlIjtpOjA7czo0OiJoZWxwIjtzOjM3MTg6Igk8aDEgY2xhc3M9 InRpdGxlIj5tZW1fcHVibGljX2FydGljbGUgcGx1Z2luPC9oMT4KCgk8aDIgY2xhc3M9InNl Y3Rpb24gc3VtbWFyeSI+U3VtbWFyeTwvaDI+CgoJPHA+VGhpcyBwbHVnaW4gYWxsb3dzIGZv ciBhIHNpdGUgb3duZXIgdG8gY3JlYXRlIGFuIGFydGljbGUgZWRpdCBmb3JtIG9uIHRoZSBw dWJsaWMgc2lkZSBvZiB0aGVpciBzaXRlLjwvcD4KCgk8cD5Ob3RlOiBUaGVyZSBhcmUgbm8g c2VjdXJpdHkgY2hlY2tzLiBBbnlvbmUgd2hvIGNhbiBzZWUgdGhlIGZvcm0gd2lsbCBiZSBh YmxlIHRvIHN1Ym1pdCBhbiBhcnRpY2xlLiBJIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3Ug b25seSBsZXQgdGhlIHVzZXIgbW9kaWZ5IGZpZWxkcyB0aGF0IHlvdSB3YW50IHRoZW0gdG8g bW9kaWZ5LiBBbGwgb3RoZXIgaW1wb3J0IGZpZWxkcyBzaG91bGQgYmUgcGFzc2VkIHRocm91 Z2ggd2l0aCBtZW1fZm9ybV9zZWNyZXQuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVz ZSBpZ25fcGFzc3dvcmRfcHJvdGVjdCB0byByZWR1Y2Ugc3BhbS48L3A+CgoJPHA+VGhpcyBw bHVnaW4gcmVxdWlyZXMgbWVtX2Zvcm0uPC9wPgoKCTxwPlRoaXMgcGx1Z2luIGhhcyA8c3Bh biBjbGFzcz0iY2FwcyI+TUxQPC9zcGFuPiBzdXBwb3J0LjwvcD4KCgk8cD5UaGlzIHBsdWdp biBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCA0LjAuNyBhbmQgNC4wLjg8L3A+CgoJPGgyIGNsYXNz PSJzZWN0aW9uIGNvbnRhY3QiPkF1dGhvciBDb250YWN0PC9oMj4KCgk8cD48YSBocmVmPSJt YWlsdG86bW1hbmZyZUBnbWFpbC5jb20/c3ViamVjdD1UZXh0cGF0dGVybiUyMG1lbV9wdWJs aWNfYXJ0aWNsZSUyMHBsdWdpbiI+TWljaGFlbCBNYW5mcmU8L2E+PGJyIC8+CjxhIGhyZWY9 Imh0dHA6Ly9tYW5mcmUubmV0Ij5odHRwOi8vbWFuZnJlLm5ldDwvYT48L3A+CgoJPGgyIGNs YXNzPSJzZWN0aW9uIGxpY2Vuc2UiPkxpY2Vuc2U8L2gyPgoKCTxwPlRoaXMgcGx1Z2luIGlz IGxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5z aW5nL2xpY2Vuc2VzL2luZm8vR1BMdjIuaHRtbCI+R1BMdjI8L2E+LjwvcD4KCgk8aDIgY2xh c3M9InNlY3Rpb24gaW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2gyPgoKCTxwPk5vIGV4 dHJhIGluc3RhbGxhdGlvbiBzdGVwczwvcD4KCgk8aDIgY2xhc3M9InNlY3Rpb24gdGFncyI+ VGFnczwvaDI+CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjbWVtXyI+bWVtX3B1YmxpY19hcnRp Y2xlPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNtZW1fcHVibGljX2FydGljbGVfaWZfcHMi Pm1lbV9wdWJsaWNfYXJ0aWNsZV9pZl9wczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbWVt X3B1YmxpY19hcnRpY2xlX3BzIj5tZW1fcHVibGljX2FydGljbGVfcHM8L2E+PC9saT4KCTwv dWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtZW1fcHVibGljX2FydGljbGUiPm1lbV9wdWJs aWNfYXJ0aWNsZTwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5UaGlzIHRhZyB3aWxs IG91dHB1dCBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZm9ybS4gWW91IG11 c3Qgc3BlY2lmeSBlYWNoIG9mIHRoZSBhcnRpY2xlIGlucHV0IGZpZWxkcyB0aGF0IHlvdSB3 YW50IHRvIGRpc3BsYXkgdG8gdGhlIGF1dGhvci48L3A+CgoJPHVsIGNsYXNzPSJhdHRzIj4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+Zm9ybTwvc3Bhbj4gPHNwYW4gY2xhc3M9 ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBOYW1lIG9mIGZvcm0gdGhhdCBjb250YWlucyB0 aGUgbWVtX3NpbXBsZV9mb3JtIGZvcm0gdGFncy48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnN1Y2Nlc3NfZm9ybTwvc3Bh bj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBOYW1lIG9mIHRoZSBm b3JtIHRoYXQgd2lsbCBiZSBzaG93biBhZnRlciBhIHN1Y2Nlc3NmdWwgcG9zdC48L2xpPgoJ PC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUi PmRvX3BpbmdzPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5ib29sZWFuPC9zcGFu PiBTZXQgdG8gJiM4MjIwOzEmIzgyMjE7IGlmIHlvdSB3YW50IHRvIHBpbmcgdGhlIHNlcnZp Y2VzIHRoYXQgYXJlIG5vcm1hbGx5IHBpbmdlZCB1c2luZyB0aGUgYWRtaW4gZWRpdCBmb3Jt LjwvbGk+Cgk8L3VsPgoKCTxoND48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gRmll bGQgTmFtZXM8L2g0PgoKCTxwPlRpdGxlLCBCb2R5LCBCb2R5X2h0bWwsIEV4Y2VycHQsIEV4 Y2VycHRfaHRtbCwgSW1hZ2UsIEtleXdvcmRzLCBTdGF0dXMsIEF1dGhvciwgU2VjdGlvbiwg Q2F0ZWdvcnkxLCBDYXRlZ29yeTIsIHRleHRpbGVfYm9keSwgdGV4dGlsZV9leGNlcnB0LCBB bm5vdGF0ZSwgb3ZlcnJpZGVfZm9ybSwgdXJsX3RpdGxlLCBBbm5vdGF0ZUludml0ZSwgY3Vz dG9tXzEsIGN1c3RvbV8yLCAmIzgyMzA7LCBjdXN0b21fMTA8L3A+CgoJPHA+RXhwaXJlcyBU aW1lOiBleHBpcmVzLCBleHBfeWVhciwgZXhwX21vbnRoLCBleHBfZGF5LCBleHBfaG91ciwg ZXhwX21pbnV0ZSwgZXhwX3NlY29uZDwvcD4KCgk8cD5Qb3N0ZWQgVGltZTogcHVibGlzaF9u b3csIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgZXhwX3NlY29uZDwvcD4KCgk8 aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9zaW1wbGVfaWZfcHMiPm1lbV9wdWJsaWNfYXJ0aWNs ZV9pZl9wczwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5Db25kaXRpb25hbCB0YWcg dGhhdCBjaGVja3MgdG8gc2VlIGlmIGEgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+ IGZpZWxkIHdhcyBwb3N0ZWQsIG9yIGlmIGl0IGhhcyBhIHNwZWNpZmljIHZhbHVlLjwvcD4K Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5uYW1l PC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IDxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBmaWVsZCBuYW1lIHBvc3RlZCB3aXRoIHRoZSBmb3Jt LjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dHMtbmFtZSI+ZXF1YWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwv c3Bhbj4gVmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB2YWx1ZSBvZiBuYW1lLiBJZiBu b3Qgc3BlY2lmaWVkLCB0YWcgY2hlY2tzIHRvIHNlZSBpZiBmb3JtIHBvc3RlZCB2YXJpYWJs ZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZmllbGQgbmFtZS48L2xpPgoJPC91 bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9zaW1wbGVfcHMiPm1lbV9wdWJsaWNfYXJ0 aWNsZV9wczwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5UaGlzIHRhZyB3aWxsIG91 dHB1dCB0aGUgdmFsdWUgb2YgdGhlIHBvc3RlZCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gZm9ybSBmaWVsZC48L3A+CgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0dHMtbmFtZSI+bmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+ c3RyaW5nPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZmllbGQgbmFt ZSBwb3N0ZWQgd2l0aCB0aGUgZm9ybS48L2xpPgoJPC91bD4iO3M6NDoiY29kZSI7czoxMDgy NzoiLy8gbmVlZGVkIGZvciBNTFAKZGVmaW5lKCAnTUVNX1BVQkxJQ19BUlRJQ0xFX1BSRUZJ WCcgLCAnbWVtX3B1YmxpY19hcnRpY2xlJyApOwoKZ2xvYmFsICRtZW1fcHVibGljX2FydGlj bGVfbGFuZzsKCmlmICghaXNfYXJyYXkoJG1lbV9wdWJsaWNfYXJ0aWNsZV9sYW5nKSkKewoJ JG1lbV9wdWJsaWNfYXJ0aWNsZV9sYW5nID0gYXJyYXkoCgkJJ2F1dGhvcl9taXNzaW5nJwk9 PgknQXV0aG9yIG5vdCBwcm92aWRlZC4nLAoJCSd1cmxfdGl0bGVfaXNfbXVsdGlwbGUnCT0+ ICdUaGUgdXJsX3RpdGxlIG11c3QgYmUgdW5pcXVlLicsCgkpOwp9CgpyZWdpc3Rlcl9jYWxs YmFjayggJ21lbV9wdWJsaWNfYXJ0aWNsZV9lbnVtZXJhdGVfc3RyaW5ncycgLCAnbDEwbi5l bnVtZXJhdGVfc3RyaW5ncycgKTsKZnVuY3Rpb24gbWVtX3B1YmxpY19hcnRpY2xlX2VudW1l cmF0ZV9zdHJpbmdzKCRldmVudCAsICRzdGVwPScnICwgJHByZT0wKQp7CglnbG9iYWwgJG1l bV9wdWJsaWNfYXJ0aWNsZV9sYW5nOwoJJHIgPSBhcnJheQkoCgkJCQknb3duZXInCQk9PiAn bWVtX3B1YmxpY19hcnRpY2xlJywJCQkjCUNoYW5nZSB0byB5b3VyIHBsdWdpbidzIG5hbWUK CQkJCSdwcmVmaXgnCT0+IE1FTV9QVUJMSUNfQVJUSUNMRV9QUkVGSVgsCQkjCUl0cyB1bmlx dWUgc3RyaW5nIHByZWZpeAoJCQkJJ2xhbmcnCQk9PiAnZW4tZ2InLAkJCQkjCVRoZSBsYW5n dWFnZSBvZiB0aGUgaW5pdGlhbCBzdHJpbmdzLgoJCQkJJ2V2ZW50JwkJPT4gJ3B1YmxpYycs CQkJIwlwdWJsaWMvYWRtaW4vY29tbW9uID0gd2hpY2ggaW50ZXJmYWNlIHRoZSBzdHJpbmdz IHdpbGwgYmUgbG9hZGVkIGludG8KCQkJCSdzdHJpbmdzJwk9PiAkbWVtX3B1YmxpY19hcnRp Y2xlX2xhbmcsCQkjCVRoZSBzdHJpbmdzIHRoZW1zZWx2ZXMuCgkJCQkpOwoJcmV0dXJuICRy Owp9CgoKZnVuY3Rpb24gbWVtX3BhX2d0eHQoJHdoYXQsJGFyZ3MgPSBhcnJheSgpKQp7Cgln bG9iYWwgJG1lbV9wdWJsaWNfYXJ0aWNsZV9sYW5nLCAkdGV4dGFycmF5OwoKCSRrZXkgPSBz dHJ0b2xvd2VyKCBNRU1fUFVCTElDX0FSVElDTEVfUFJFRklYIC4gJy0nIC4gJHdoYXQgKTsK CglpZiAoaXNzZXQoJHRleHRhcnJheVska2V5XSkpCgl7CgkJJHN0ciA9ICR0ZXh0YXJyYXlb JGtleV07Cgl9CgllbHNlCgl7CgkJJGtleSA9IHN0cnRvbG93ZXIoJHdoYXQpOwoKCQlpZiAo aXNzZXQoJG1lbV9wdWJsaWNfYXJ0aWNsZV9sYW5nWyRrZXldKSkKCQkJJHN0ciA9ICRtZW1f cHVibGljX2FydGljbGVfbGFuZ1ska2V5XTsKCQllbHNlaWYgKGlzc2V0KCR0ZXh0YXJyYXlb JGtleV0pKQoJCQkkc3RyID0gJHRleHRhcnJheVska2V5XTsKCQllbHNlCgkJCSRzdHIgPSAk d2hhdDsKCX0KCglpZiggIWVtcHR5KCRhcmdzKSApCgkJJHN0ciA9IHN0cnRyKCAkc3RyICwg JGFyZ3MgKTsKCglyZXR1cm4gJHN0cjsKfQoKCnJlcXVpcmVfcGx1Z2luKCdtZW1fZm9ybScp OwoKZnVuY3Rpb24gbWVtX3B1YmxpY19hcnRpY2xlKCRhdHRzLCAkdGhpbmc9JycpCnsKCWds b2JhbCAkbWVtX3B1YmxpY19hcnRpY2xlX2lkOwoKICAgICRhdHRzID0gbEF0dHMoYXJyYXko CiAgICAgICAgJ2Zvcm0nCT0+ICcnLAogICAgICAgICdzdWNjZXNzX2Zvcm0nCT0+IGZhbHNl LAogICAgICAgICdkb19waW5ncycJPT4gZmFsc2UsCiAgICAgICAgJ2FydGljbGVfaWQnCT0+ CWZhbHNlLAogICAgKSwkYXR0cywwKTsKCiAgICAkYXR0c1sndHlwZSddID0gJ21lbV9hcnRp Y2xlX3B1YmxpYyc7CgoJCWlmICghZW1wdHkoJGF0dHNbJ2Zvcm0nXSkpIHsKCQkJJHRoaW5n ID0gZmV0Y2hfZm9ybSgkYXR0c1snZm9ybSddKTsKCQkJdW5zZXQoJGF0dHNbJ2Zvcm0nXSk7 CgkJfQoKCQkkbWVtX3B1YmxpY19hcnRpY2xlX2lkID0gJGF0dHNbJ2FydGljbGVfaWQnXTsK CgkJZm9yZWFjaChhcnJheSgnZG9fcGluZ3MnLCdzdWNjZXNzX2Zvcm0nLCAnYXJ0aWNsZV9p ZCcpIGFzICRhKSB7CgkJCSR0aGluZyAuPSAnPHR4cDptZW1fZm9ybV9zZWNyZXQgbmFtZT0i bWVtX3B1YmxpY19hcnRpY2xlXycuJGEuJyIgdmFsdWU9IicuJGF0dHNbJGFdLiciIC8+JzsK CQkJdW5zZXQoJGF0dHNbJGFdKTsKCQl9CgogICAgcmV0dXJuIG1lbV9mb3JtKCRhdHRzLCAk dGhpbmcpOwp9CgpyZWdpc3Rlcl9jYWxsYmFjaygnbWVtX3B1YmxpY19hcnRpY2xlX2RlZmF1 bHRzJywgJ21lbV9mb3JtLmRlZmF1bHRzJyk7CmZ1bmN0aW9uIG1lbV9wdWJsaWNfYXJ0aWNs ZV9kZWZhdWx0cygpCnsKCWdsb2JhbCAkbWVtX2Zvcm1fdHlwZSwgJG1lbV9mb3JtX2RlZmF1 bHQsICR0aGlzYXJ0aWNsZSwgJG1lbV9wdWJsaWNfYXJ0aWNsZV9pZDsKCglpZiAoJG1lbV9m b3JtX3R5cGUgIT0gJ21lbV9hcnRpY2xlX3B1YmxpYycpCgkJcmV0dXJuOwoKCWlmIChpc3Nl dCgkbWVtX3B1YmxpY19hcnRpY2xlX2lkKSkKCXsKCQlpZiAoIWlzX251bWVyaWMoJG1lbV9w dWJsaWNfYXJ0aWNsZV9pZCkgJiYgc3RycG9zKCRtZW1fcHVibGljX2FydGljbGVfaWQsICc8 dHhwOicpPT0wICkKCQkJJG1lbV9wdWJsaWNfYXJ0aWNsZV9pZCA9IHBhcnNlKCRtZW1fcHVi bGljX2FydGljbGVfaWQpOwoKCQlpZiAoaXNfbnVtZXJpYygkbWVtX3B1YmxpY19hcnRpY2xl X2lkKSkKCQkJJGFydGljbGUgPSBzYWZlX3JvdygnKicsICd0ZXh0cGF0dGVybicsICJJRCA9 ICIuZG9TbGFzaCgkbWVtX3B1YmxpY19hcnRpY2xlX2lkKSk7Cgl9CgoJaWYgKCEkYXJ0aWNs ZSAmJiBpc3NldCgkdGhpc2FydGljbGUpKQoJewoJCSRhcnRpY2xlID0gJHRoaXNhcnRpY2xl OwoJfQoKCWlmICgkYXJ0aWNsZSkKCXsKCQlmb3JlYWNoKCRhcnRpY2xlIGFzICRrID0+ICR2 KQoJCXsKCQkJJG1lbV9mb3JtX2RlZmF1bHRbJGtdID0gJHY7CgkJfQoJfQp9CgpyZWdpc3Rl cl9jYWxsYmFjaygnbWVtX3B1YmxpY19hcnRpY2xlX3N1Ym1pdCcsICdtZW1fZm9ybS5zdWJt aXQnKTsKZnVuY3Rpb24gbWVtX3B1YmxpY19hcnRpY2xlX3N1Ym1pdCgpCnsKCWdsb2JhbCAk bWVtX2Zvcm1fdHlwZSwgJG1lbV9mb3JtX3ZhbHVlcywgJHByZWZzLCAkdmFycywgJHR4cF91 c2VyLCAkaWduX3VzZXI7CgoJaWYgKCRtZW1fZm9ybV90eXBlICE9PSAnbWVtX2FydGljbGVf cHVibGljJykKCQlyZXR1cm47CgoJJHVzZXIgPSBkb1NsYXNoKCFlbXB0eSgkaWduX3VzZXIp ID8gJGlnbl91c2VyIDogJHR4cF91c2VyKTsKCglpZiAoaXNzZXQoJG1lbV9mb3JtX3ZhbHVl c1snQXV0aG9yJ10pKQoJCSR1c2VyID0gZG9TbGFzaCgkbWVtX2Zvcm1fdmFsdWVzWydBdXRo b3InXSk7CgoJaWYgKGVtcHR5KCR1c2VyKSkKCXsKCQlyZXR1cm4gbWVtX2Zvcm1fZXJyb3Io IG1lbV9wYV9ndHh0KCdhdXRob3JfbWlzc2luZycpICk7Cgl9CgoJcmVxdWlyZV9vbmNlKHR4 cGF0aC4nL2luY2x1ZGUvdHhwX2FydGljbGUucGhwJyk7CgoJJGludF92YXJzID0gYXJyYXko J1N0YXR1cycsJ3RleHRpbGVfYm9keScsJ3RleHRpbGVfZXhjZXJwdCcpOwoKCSRpbmNvbWlu ZyA9IHRleHRpbGVfbWFpbl9maWVsZHMoJG1lbV9mb3JtX3ZhbHVlcywgJHByZWZzWyd1c2Vf dGV4dGlsZSddKTsKCglpZiAoZW1wdHkoJG1lbV9mb3JtX3ZhbHVlc1snSUQnXSkpCgl7CgkJ Zm9yZWFjaCAoJHZhcnMgYXMgJHYpCgkJewoJCQlpZiAoIWlzc2V0KCRtZW1fZm9ybV92YWx1 ZXNbJHZdKSkKCQkJCSRtZW1fZm9ybV92YWx1ZXNbJHZdID0gaW5fYXJyYXkoJHYsICRpbnRf dmFycykgPyAwIDogJyc7CgkJfQoKCQlleHRyYWN0KGRvU2xhc2goJGluY29taW5nKSk7CgkJ ZXh0cmFjdChhcnJheV9tYXAoJ2Fzc2VydF9pbnQnLCBhcnJheSggJGluY29taW5nWydTdGF0 dXMnXSwgJGluY29taW5nWyd0ZXh0aWxlX2JvZHknXSwgJGluY29taW5nWyd0ZXh0aWxlX2V4 Y2VycHQnXSkpKTsKCQkkQW5ub3RhdGUgPSAoaW50KSAkQW5ub3RhdGU7CgkJJEtleXdvcmRz ID0gZG9TbGFzaCh0cmltKHByZWdfcmVwbGFjZSgnLyggP1tcclxuXHQsXSkrID8vcycsICcs JywgcHJlZ19yZXBsYWNlKCcvICsvJywgJyAnLCAkS2V5d29yZHMpKSwgJywgJykpOwoKCgkJ aWYgKCFlbXB0eSgkZXhwaXJlc19kYXRlKSkKCQl7CgkJCSRleHBpcmVzID0gc3RydG90aW1l KCRleHBpcmVzX2RhdGUpOwoJCQkkd2hlbmV4cGlyZXMgPSAkZXhwaXJlc19kYXRlOwoJCX0K CQllbHNlCgkJewoJCQlpZiAoZW1wdHkoJGV4cF95ZWFyKSkgewoJCQkJJGV4cGlyZXMgPSAw OwoJCQkJJHdoZW5leHBpcmVzID0gTlVMTERBVEVUSU1FOwoJCQl9CgkJCWVsc2UgewoJCQkJ aWYoZW1wdHkoJGV4cF9tb250aCkpICRleHBfbW9udGg9MTsKCQkJCWlmKGVtcHR5KCRleHBf ZGF5KSkgJGV4cF9kYXk9MTsKCQkJCWlmKGVtcHR5KCRleHBfaG91cikpICRleHBfaG91cj0w OwoJCQkJaWYoZW1wdHkoJGV4cF9taW51dGUpKSAkZXhwX21pbnV0ZT0wOwoJCQkJaWYoZW1w dHkoJGV4cF9zZWNvbmQpKSAkZXhwX3NlY29uZD0wOwoKCQkJCSRleHBpcmVzID0gc3RydG90 aW1lKCRleHBfeWVhci4nLScuJGV4cF9tb250aC4nLScuJGV4cF9kYXkuJyAnLiRleHBfaG91 ci4nOicuJGV4cF9taW51dGUuJzonLiRleHBfc2Vjb25kKS10el9vZmZzZXQoKTsKCQkJCSR3 aGVuZXhwaXJlcyA9ICJmcm9tX3VuaXh0aW1lKCRleHBpcmVzKSI7CgkJCX0KCQl9CgoJCWlm ICgkcHVibGlzaF9ub3c9PTEpIHsKCQkJJHdoZW4gPSAnbm93KCknOwoJCQkkd2hlbl90cyA9 IHRpbWUoKTsKCQl9IGVsc2UgewoJCQlpZihlbXB0eSgkbW9udGgpKSAkbW9udGg9MTsKCQkJ aWYoZW1wdHkoJGRheSkpICRkYXk9MTsKCQkJaWYoZW1wdHkoJGhvdXIpKSAkaG91cj0wOwoJ CQlpZihlbXB0eSgkbWludXRlKSkgJG1pbnV0ZT0wOwoJCQlpZihlbXB0eSgkc2Vjb25kKSkg JHNlY29uZD0wOwoKCQkJJHdoZW4gPSAkd2hlbl90cyA9IHN0cnRvdGltZSgkeWVhci4nLScu JG1vbnRoLictJy4kZGF5LicgJy4kaG91ci4nOicuJG1pbnV0ZS4nOicuJHNlY29uZCktdHpf b2Zmc2V0KCk7CgkJCSR3aGVuID0gImZyb21fdW5peHRpbWUoJHdoZW4pIjsKCQl9CgoKCQlp ZiAoJFRpdGxlIG9yICRCb2R5IG9yICRFeGNlcnB0KQoJCXsKCQkJaWYgKGVtcHR5KCR1cmxf dGl0bGUpKSAkdXJsX3RpdGxlID0gc3RyaXBTcGFjZSgkVGl0bGVfcGxhaW4sIDEpOwoKCQkJ JHVybF90aXRsZV9jb3VudCA9IHNhZmVfY291bnQoJ3RleHRwYXR0ZXJuJywgInVybF90aXRs ZSA9ICckdXJsX3RpdGxlJyIpOwoJCQlpZiAoJHVybF90aXRsZV9jb3VudCA+IDApCgkJCQly ZXR1cm4gbWVtX2Zvcm1fZXJyb3IoIG1lbV9wYV9ndHh0KCd1cmxfdGl0bGVfaXNfbXVsdGlw bGUnLCBhcnJheSgne2NvdW50fScgPT4gJHVybF90aXRsZV9jb3VudCwgJ3t2YWx1ZX0nID0+ ICR1cmxfdGl0bGUpKSApOwoKCQkJJHJzID0gc2FmZV9pbnNlcnQoCgkJCSAgICJ0ZXh0cGF0 dGVybiIsCgkJCSAgICJUaXRsZSAgICAgICAgICAgPSAnJFRpdGxlJywKCQkJCUJvZHkgICAg ICAgICAgICA9ICckQm9keScsCgkJCQlCb2R5X2h0bWwgICAgICAgPSAnJEJvZHlfaHRtbCcs CgkJCQlFeGNlcnB0ICAgICAgICAgPSAnJEV4Y2VycHQnLAoJCQkJRXhjZXJwdF9odG1sICAg ID0gJyRFeGNlcnB0X2h0bWwnLAoJCQkJSW1hZ2UgICAgICAgICAgID0gJyRJbWFnZScsCgkJ CQlLZXl3b3JkcyAgICAgICAgPSAnJEtleXdvcmRzJywKCQkJCVN0YXR1cyAgICAgICAgICA9 ICAkU3RhdHVzLAoJCQkJUG9zdGVkICAgICAgICAgID0gICR3aGVuLAoJCQkJRXhwaXJlcyAg ICAgICAgID0gICR3aGVuZXhwaXJlcywKCQkJCUxhc3RNb2QgICAgICAgICA9ICBub3coKSwK CQkJCUF1dGhvcklEICAgICAgICA9ICckdXNlcicsCgkJCQlTZWN0aW9uICAgICAgICAgPSAn JFNlY3Rpb24nLAoJCQkJQ2F0ZWdvcnkxICAgICAgID0gJyRDYXRlZ29yeTEnLAoJCQkJQ2F0 ZWdvcnkyICAgICAgID0gJyRDYXRlZ29yeTInLAoJCQkJdGV4dGlsZV9ib2R5ICAgID0gICR0 ZXh0aWxlX2JvZHksCgkJCQl0ZXh0aWxlX2V4Y2VycHQgPSAgJHRleHRpbGVfZXhjZXJwdCwK CQkJCUFubm90YXRlICAgICAgICA9ICAkQW5ub3RhdGUsCgkJCQlvdmVycmlkZV9mb3JtICAg PSAnJG92ZXJyaWRlX2Zvcm0nLAoJCQkJdXJsX3RpdGxlICAgICAgID0gJyR1cmxfdGl0bGUn LAoJCQkJQW5ub3RhdGVJbnZpdGUgID0gJyRBbm5vdGF0ZUludml0ZScsCgkJCQljdXN0b21f MSAgICAgICAgPSAnJGN1c3RvbV8xJywKCQkJCWN1c3RvbV8yICAgICAgICA9ICckY3VzdG9t XzInLAoJCQkJY3VzdG9tXzMgICAgICAgID0gJyRjdXN0b21fMycsCgkJCQljdXN0b21fNCAg ICAgICAgPSAnJGN1c3RvbV80JywKCQkJCWN1c3RvbV81ICAgICAgICA9ICckY3VzdG9tXzUn LAoJCQkJY3VzdG9tXzYgICAgICAgID0gJyRjdXN0b21fNicsCgkJCQljdXN0b21fNyAgICAg ICAgPSAnJGN1c3RvbV83JywKCQkJCWN1c3RvbV84ICAgICAgICA9ICckY3VzdG9tXzgnLAoJ CQkJY3VzdG9tXzkgICAgICAgID0gJyRjdXN0b21fOScsCgkJCQljdXN0b21fMTAgICAgICAg PSAnJGN1c3RvbV8xMCcsCgkJCQl1aWQgICAgICAgICAgICAgPSAnIi5tZDUodW5pcWlkKHJh bmQoKSx0cnVlKSkuIicsCgkJCQlmZWVkX3RpbWUgICAgICAgPSBub3coKSIKCQkJKTsKCgkJ CSRHTE9CQUxTWydJRCddID0gbXlzcWxfaW5zZXJ0X2lkKCk7CgoJCQlpZiAoJFN0YXR1cz49 NCkgewoJCQkJaWYgKCFlbXB0eSgkbWVtX2Zvcm1fdmFsdWVzWydtZW1fcHVibGljX2FydGlj bGVfZG9fcGluZ3MnXSkpCgkJCQkJZG9fcGluZ3MoKTsKCgkJCQl1cGRhdGVfbGFzdG1vZCgp OwoJCQl9CgkJfQoJfQoJZWxzZQoJewoJCS8vIHVwZGF0ZQoJCSRvbGRBcnRpY2xlID0gc2Fm ZV9yb3coJyosIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHNMYXN0TW9kJywndGV4dHBh dHRlcm4nLCdJRCA9ICcuKGludCkkaW5jb21pbmdbJ0lEJ10pOwoKCQkkaW5jb21pbmcgPSBs QXR0cygkb2xkQXJ0aWNsZSwgJGluY29taW5nLCAwKTsKCQkkaW5jb21pbmdbJ0Fubm90YXRl J10gPSBlbXB0eSgkaW5jb21pbmdbJ0Fubm90YXRlJ10pID8gMCA6ICRpbmNvbWluZ1snQW5u b3RhdGUnXTsKCgkJaWYgKCFlbXB0eSgkaW5jb21pbmdbJ3NMYXN0TW9kJ10pICYmICRvbGRB cnRpY2xlWydzTGFzdE1vZCddICE9ICRpbmNvbWluZ1snc0xhc3RNb2QnXSkKCQl7CgkJCS8v Y29uY3VycmVudCBlZGl0CgkJCXJldHVybiBtZW1fZm9ybV9lcnJvciggZ1R4dCgnY29uY3Vy cmVudF9lZGl0X2J5JywgYXJyYXkoJ3thdXRob3J9JyA9PiBodG1sc3BlY2lhbGNoYXJzKCRv bGRBcnRpY2xlWydMYXN0TW9kSUQnXSkpKSApOwoJCX0KCQlleHRyYWN0KCRpbmNvbWluZyk7 CgoJCSRMYXN0TW9kSUQgPSAkdXNlcjsKCgkJaWYgKCFlbXB0eSgkZXhwaXJlc19kYXRlKSkK CQl7CgkJCSRleHBpcmVzID0gc3RydG90aW1lKCRleHBpcmVzX2RhdGUpOwoJCQkkd2hlbmV4 cGlyZXMgPSAiRXhwaXJlcz1mcm9tX3VuaXh0aW1lKCRleHBpcmVzKSI7CgkJfQoJCWVsc2UK CQl7CgkJCWlmICghZW1wdHkoJGV4cF95ZWFyKSkgewoJCQkJaWYoZW1wdHkoJGV4cF9tb250 aCkpICRleHBfbW9udGg9MTsKCQkJCWlmKGVtcHR5KCRleHBfZGF5KSkgJGV4cF9kYXk9MTsK CQkJCWlmKGVtcHR5KCRleHBfaG91cikpICRleHBfaG91cj0wOwoJCQkJaWYoZW1wdHkoJGV4 cF9taW51dGUpKSAkZXhwX21pbnV0ZT0wOwoJCQkJaWYoZW1wdHkoJGV4cF9zZWNvbmQpKSAk ZXhwX3NlY29uZD0wOwoKCQkJCSRleHBpcmVzID0gc3RydG90aW1lKCRleHBfeWVhci4nLScu JGV4cF9tb250aC4nLScuJGV4cF9kYXkuJyAnLiRleHBfaG91ci4nOicuJGV4cF9taW51dGUu JzonLiRleHBfc2Vjb25kKS10el9vZmZzZXQoKTsKCQkJCSR3aGVuZXhwaXJlcyA9ICJFeHBp cmVzPWZyb21fdW5peHRpbWUoJGV4cGlyZXMpIjsKCQkJfQoJCQllbHNlCgkJCQkkd2hlbmV4 cGlyZXMgPSAnJzsKCQl9CgoJCWlmKEAkcmVzZXRfdGltZSkgewoJCQkkd2hlbnBvc3RlZCA9 ICIsUG9zdGVkPW5vdygpIjsKCQkJJHdoZW5fdHMgPSB0aW1lKCk7CgkJfSBlbHNlIHsKCQkJ aWYgKCFlbXB0eSgkeWVhcikpCgkJCXsKCQkJCSR3aGVuID0gJHdoZW5fdHMgPSBzdHJ0b3Rp bWUoJHllYXIuJy0nLiRtb250aC4nLScuJGRheS4nICcuJGhvdXIuJzonLiRtaW51dGUuJzon LiRzZWNvbmQpLXR6X29mZnNldCgpOwoJCQkJJHdoZW5wb3N0ZWQgPSAiLFBvc3RlZD1mcm9t X3VuaXh0aW1lKCR3aGVuKSI7CgkJCX0KCQkJZWxzZQoJCQkJJHdoZW5wb3N0ZWQgPSAnJzsK CQl9CgoJCS8vQXV0by1VcGRhdGUgY3VzdG9tLXRpdGxlcyBhY2NvcmRpbmcgdG8gVGl0bGUs IGFzIGxvbmcgYXMgdW5wdWJsaXNoZWQgYW5kIE5PVCBjdXN0b21pemVkCgkJaWYgKCBlbXB0 eSgkdXJsX3RpdGxlKQoJCQkgIHx8ICggKCRvbGRBcnRpY2xlWydTdGF0dXMnXSA8IDQpCgkJ CQkJJiYgKCRvbGRBcnRpY2xlWyd1cmxfdGl0bGUnXSA9PSAkdXJsX3RpdGxlICkKCQkJCQkm JiAoJG9sZEFydGljbGVbJ3VybF90aXRsZSddID09IHN0cmlwU3BhY2UoJG9sZEFydGljbGVb J1RpdGxlJ10sMSkpCgkJCQkJJiYgKCRvbGRBcnRpY2xlWydUaXRsZSddICE9ICRUaXRsZSkK CQkJCSApCgkJICAgKQoJCXsKCQkJJHVybF90aXRsZSA9IHN0cmlwU3BhY2UoJFRpdGxlX3Bs YWluLCAxKTsKCgkJCSR1cmxfdGl0bGVfY291bnQgPSBzYWZlX2NvdW50KCd0ZXh0cGF0dGVy bicsICJ1cmxfdGl0bGUgPSAnJHVybF90aXRsZScgYW5kIElEICE9ICRJRCIpOwoJCQlpZiAo JHVybF90aXRsZV9jb3VudCA+IDApCgkJCQlyZXR1cm4gbWVtX2Zvcm1fZXJyb3IoIG1lbV9w YV9ndHh0KCd1cmxfdGl0bGVfaXNfbXVsdGlwbGUnLCBhcnJheSgne2NvdW50fScgPT4gJHVy bF90aXRsZV9jb3VudCwgJ3t2YWx1ZX0nID0+ICR1cmxfdGl0bGUpICkpOwoJCX0KCgkJJHJz ID0gc2FmZV91cGRhdGUoInRleHRwYXR0ZXJuIiwKCQkgICAiVGl0bGUgICAgICAgICAgID0g JyRUaXRsZScsCgkJCUJvZHkgICAgICAgICAgICA9ICckQm9keScsCgkJCUJvZHlfaHRtbCAg ICAgICA9ICckQm9keV9odG1sJywKCQkJRXhjZXJwdCAgICAgICAgID0gJyRFeGNlcnB0JywK CQkJRXhjZXJwdF9odG1sICAgID0gJyRFeGNlcnB0X2h0bWwnLAoJCQlLZXl3b3JkcyAgICAg ICAgPSAnJEtleXdvcmRzJywKCQkJSW1hZ2UgICAgICAgICAgID0gJyRJbWFnZScsCgkJCVN0 YXR1cyAgICAgICAgICA9ICAkU3RhdHVzLAoJCQlMYXN0TW9kICAgICAgICAgPSAgbm93KCks CgkJCUxhc3RNb2RJRCAgICAgICA9ICckTGFzdE1vZElEJywKCQkJU2VjdGlvbiAgICAgICAg ID0gJyRTZWN0aW9uJywKCQkJQ2F0ZWdvcnkxICAgICAgID0gJyRDYXRlZ29yeTEnLAoJCQlD YXRlZ29yeTIgICAgICAgPSAnJENhdGVnb3J5MicsCgkJCUFubm90YXRlICAgICAgICA9ICAk QW5ub3RhdGUsCgkJCXRleHRpbGVfYm9keSAgICA9ICAkdGV4dGlsZV9ib2R5LAoJCQl0ZXh0 aWxlX2V4Y2VycHQgPSAgJHRleHRpbGVfZXhjZXJwdCwKCQkJb3ZlcnJpZGVfZm9ybSAgID0g JyRvdmVycmlkZV9mb3JtJywKCQkJdXJsX3RpdGxlICAgICAgID0gJyR1cmxfdGl0bGUnLAoJ CQlBbm5vdGF0ZUludml0ZSAgPSAnJEFubm90YXRlSW52aXRlJywKCQkJY3VzdG9tXzEgICAg ICAgID0gJyRjdXN0b21fMScsCgkJCWN1c3RvbV8yICAgICAgICA9ICckY3VzdG9tXzInLAoJ CQljdXN0b21fMyAgICAgICAgPSAnJGN1c3RvbV8zJywKCQkJY3VzdG9tXzQgICAgICAgID0g JyRjdXN0b21fNCcsCgkJCWN1c3RvbV81ICAgICAgICA9ICckY3VzdG9tXzUnLAoJCQljdXN0 b21fNiAgICAgICAgPSAnJGN1c3RvbV82JywKCQkJY3VzdG9tXzcgICAgICAgID0gJyRjdXN0 b21fNycsCgkJCWN1c3RvbV84ICAgICAgICA9ICckY3VzdG9tXzgnLAoJCQljdXN0b21fOSAg ICAgICAgPSAnJGN1c3RvbV85JywKCQkJY3VzdG9tXzEwICAgICAgID0gJyRjdXN0b21fMTAn CgkJCSR3aGVucG9zdGVkCgkJCSR3aGVuZXhwaXJlcyIsCgkJCSJJRCA9ICRJRCIKCQkpOwoK CQlpZigkU3RhdHVzID49IDQpIHsKCQkJaWYgKCRvbGRBcnRpY2xlWydTdGF0dXMnXSA8IDQg JiYgIWVtcHR5KCRtZW1fZm9ybV92YWx1ZXNbJ21lbV9wdWJsaWNfYXJ0aWNsZV9kb19waW5n cyddKSApIHsKCQkJCWRvX3BpbmdzKCk7CgkJCX0KCgkJCXVwZGF0ZV9sYXN0bW9kKCk7CgkJ fQoJfQoKCWlmIChpc3NldCgkcnMpICYmICRycykKCXsKCQkkc3VjY2Vzc19mb3JtID0gQCRt ZW1fZm9ybV92YWx1ZXNbJ21lbV9wdWJsaWNfYXJ0aWNsZV9zdWNjZXNzX2Zvcm0nXTsKCgkJ aWYgKCFlbXB0eSgkc3VjY2Vzc19mb3JtKSkKCQl7CgkJCXJldHVybiBwYXJzZShmZXRjaF9m b3JtKCRzdWNjZXNzX2Zvcm0pKTsKCQl9Cgl9Cn0KCgpmdW5jdGlvbiBtZW1fcHVibGljX2Fy dGljbGVfcHMoJGF0dHMsJHRoaW5nPScnKQp7CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdu YW1lJwk9PglmYWxzZSwKCSksJGF0dHMpKTsKCglpZiAoIWVtcHR5KCRuYW1lKSkKCXsKCQkJ JG4gPSBncHMoJG5hbWUpOwoJCQlpZiAoIWVtcHR5KCRuKSkKCQkJCXJldHVybiAkbjsKCX0K CXJldHVybiAnJzsKfQoKZnVuY3Rpb24gbWVtX3B1YmxpY19hcnRpY2xlX2lmX3BzKCRhdHRz LCAkdGhpbmc9JycpCnsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ25hbWUnCT0+CWZhbHNl LAoJCSdlcXVhbCcJPT4JZmFsc2UsCgkpLCRhdHRzKSk7CgoJaWYgKCRuYW1lID09PSBmYWxz ZSkKCQl0cmlnZ2VyX2Vycm9yKGdUeHQoJ2F0dHJpYnV0ZV9taXNzaW5nJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5hbWUpKSk7CgoJaWYgKCRlcXVhbCA9PT0gZmFsc2UpCgkJJGNvbmRpdGlv biA9IGlzc2V0KCRfUE9TVFskbmFtZV0pOwoJZWxzZQoJCSRjb25kaXRpb24gPSAoZ3BzKCdu YW1lJykgPT0gJGVxdWFsKTsKCSR0aGluZyA9IEV2YWxFbHNlKCR0aGluZywgJGNvbmRpdGlv bik7CgoJcmV0dXJuIHBhcnNlKCR0aGluZyk7Cn0KIjtzOjg6ImhlbHBfcmF3IjtzOjI3NTU6 ImgxKHRpdGxlKS4gbWVtX3B1YmxpY19hcnRpY2xlIHBsdWdpbgoKaDIoc2VjdGlvbiBzdW1t YXJ5KS4gU3VtbWFyeQoKcC4gVGhpcyBwbHVnaW4gYWxsb3dzIGZvciBhIHNpdGUgb3duZXIg dG8gY3JlYXRlIGFuIGFydGljbGUgZWRpdCBmb3JtIG9uIHRoZSBwdWJsaWMgc2lkZSBvZiB0 aGVpciBzaXRlLgoKcC4gTm90ZTogVGhlcmUgYXJlIG5vIHNlY3VyaXR5IGNoZWNrcy4gQW55 b25lIHdobyBjYW4gc2VlIHRoZSBmb3JtIHdpbGwgYmUgYWJsZSB0byBzdWJtaXQgYW4gYXJ0 aWNsZS4gSSBzdHJvbmdseSBzdWdnZXN0IHRoYXQgeW91IG9ubHkgbGV0IHRoZSB1c2VyIG1v ZGlmeSBmaWVsZHMgdGhhdCB5b3Ugd2FudCB0aGVtIHRvIG1vZGlmeS4gQWxsIG90aGVyIGlt cG9ydCBmaWVsZHMgc2hvdWxkIGJlIHBhc3NlZCB0aHJvdWdoIHdpdGggbWVtX2Zvcm1fc2Vj cmV0LiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgaWduX3Bhc3N3b3JkX3Byb3Rl Y3QgdG8gcmVkdWNlIHNwYW0uCgpwLiBUaGlzIHBsdWdpbiByZXF1aXJlcyBtZW1fZm9ybS4K CnAuIFRoaXMgcGx1Z2luIGhhcyBNTFAgc3VwcG9ydC4KCnAuIFRoaXMgcGx1Z2luIGhhcyBi ZWVuIHRlc3RlZCB3aXRoIDQuMC43IGFuZCA0LjAuOAoKaDIoc2VjdGlvbiBjb250YWN0KS4g QXV0aG9yIENvbnRhY3QKCiJNaWNoYWVsIE1hbmZyZSI6bWFpbHRvOm1tYW5mcmVAZ21haWwu Y29tP3N1YmplY3Q9VGV4dHBhdHRlcm4lMjBtZW1fcHVibGljX2FydGljbGUlMjBwbHVnaW4K Imh0dHA6Ly9tYW5mcmUubmV0IjpodHRwOi8vbWFuZnJlLm5ldAoKaDIoc2VjdGlvbiBsaWNl bnNlKS4gTGljZW5zZQoKcC4gVGhpcyBwbHVnaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlICJH UEx2MiI6aHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2luZy9saWNlbnNlcy9pbmZvL0dQTHYy Lmh0bWwuCgpoMihzZWN0aW9uIGluc3RhbGxhdGlvbikuIEluc3RhbGxhdGlvbgoKcC4gTm8g ZXh0cmEgaW5zdGFsbGF0aW9uIHN0ZXBzCgpoMihzZWN0aW9uIHRhZ3MpLiBUYWdzCgoqICJt ZW1fcHVibGljX2FydGljbGUiOiNtZW1fCiogIm1lbV9wdWJsaWNfYXJ0aWNsZV9pZl9wcyI6 I21lbV9wdWJsaWNfYXJ0aWNsZV9pZl9wcwoqICJtZW1fcHVibGljX2FydGljbGVfcHMiOiNt ZW1fcHVibGljX2FydGljbGVfcHMKCmgzKHRhZyNtZW1fcHVibGljX2FydGljbGUpLiBtZW1f cHVibGljX2FydGljbGUKCnAodGFnLXN1bW1hcnkpLiBUaGlzIHRhZyB3aWxsIG91dHB1dCBh biBIVE1MIGZvcm0uIFlvdSBtdXN0IHNwZWNpZnkgZWFjaCBvZiB0aGUgYXJ0aWNsZSBpbnB1 dCBmaWVsZHMgdGhhdCB5b3Ugd2FudCB0byBkaXNwbGF5IHRvIHRoZSBhdXRob3IuCgoqKGF0 dHMpICUoYXR0cy1uYW1lKWZvcm0lICUoYXR0cy10eXBlKXN0cmluZyUgTmFtZSBvZiBmb3Jt IHRoYXQgY29udGFpbnMgdGhlIG1lbV9zaW1wbGVfZm9ybSBmb3JtIHRhZ3MuCiooYXR0cykg JShhdHRzLW5hbWUpc3VjY2Vzc19mb3JtJSAlKGF0dHMtdHlwZSlzdHJpbmclIE5hbWUgb2Yg dGhlIGZvcm0gdGhhdCB3aWxsIGJlIHNob3duIGFmdGVyIGEgc3VjY2Vzc2Z1bCBwb3N0Lgoq KGF0dHMpICUoYXR0cy1uYW1lKWRvX3BpbmdzJSAlKGF0dHMtdHlwZSlib29sZWFuJSBTZXQg dG8gIjEiIGlmIHlvdSB3YW50IHRvIHBpbmcgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIG5vcm1h bGx5IHBpbmdlZCB1c2luZyB0aGUgYWRtaW4gZWRpdCBmb3JtLgoKaDQuIEhUTUwgRmllbGQg TmFtZXMKCnAuIFRpdGxlLCBCb2R5LCBCb2R5X2h0bWwsIEV4Y2VycHQsIEV4Y2VycHRfaHRt bCwgSW1hZ2UsIEtleXdvcmRzLCBTdGF0dXMsIEF1dGhvciwgU2VjdGlvbiwgQ2F0ZWdvcnkx LCBDYXRlZ29yeTIsIHRleHRpbGVfYm9keSwgdGV4dGlsZV9leGNlcnB0LCBBbm5vdGF0ZSwg b3ZlcnJpZGVfZm9ybSwgdXJsX3RpdGxlLCBBbm5vdGF0ZUludml0ZSwgY3VzdG9tXzEsIGN1 c3RvbV8yLCAuLi4sIGN1c3RvbV8xMAoKcC4gRXhwaXJlcyBUaW1lOiBleHBpcmVzLCBleHBf eWVhciwgZXhwX21vbnRoLCBleHBfZGF5LCBleHBfaG91ciwgZXhwX21pbnV0ZSwgZXhwX3Nl Y29uZAoKcC4gUG9zdGVkIFRpbWU6IHB1Ymxpc2hfbm93LCB5ZWFyLCBtb250aCwgZGF5LCBo b3VyLCBtaW51dGUsIGV4cF9zZWNvbmQKCgpoMyh0YWcjbWVtX3NpbXBsZV9pZl9wcykuIG1l bV9wdWJsaWNfYXJ0aWNsZV9pZl9wcwoKcCh0YWctc3VtbWFyeSkuIENvbmRpdGlvbmFsIHRh ZyB0aGF0IGNoZWNrcyB0byBzZWUgaWYgYSBIVE1MIGZpZWxkIHdhcyBwb3N0ZWQsIG9yIGlm IGl0IGhhcyBhIHNwZWNpZmljIHZhbHVlLgoKKihhdHRzKSAlKGF0dHMtbmFtZSluYW1lJSAl KGF0dHMtdHlwZSlzdHJpbmclIEhUTUwgZmllbGQgbmFtZSBwb3N0ZWQgd2l0aCB0aGUgZm9y bS4KKihhdHRzKSAlKGF0dHMtbmFtZSllcXVhbCUgJShhdHRzLXR5cGUpc3RyaW5nJSBWYWx1 ZSB0byBjb21wYXJlIGFnYWluc3QgdGhlIHZhbHVlIG9mIG5hbWUuIElmIG5vdCBzcGVjaWZp ZWQsIHRhZyBjaGVja3MgdG8gc2VlIGlmIGZvcm0gcG9zdGVkIHZhcmlhYmxlIEhUTUwgZmll bGQgbmFtZS4KCmgzKHRhZyNtZW1fc2ltcGxlX3BzKS4gbWVtX3B1YmxpY19hcnRpY2xlX3Bz CgpwKHRhZy1zdW1tYXJ5KS4gVGhpcyB0YWcgd2lsbCBvdXRwdXQgdGhlIHZhbHVlIG9mIHRo ZSBwb3N0ZWQgSFRNTCBmb3JtIGZpZWxkLgoKKihhdHRzKSAlKGF0dHMtbmFtZSluYW1lJSAl KGF0dHMtdHlwZSlzdHJpbmclIEhUTUwgZmllbGQgbmFtZSBwb3N0ZWQgd2l0aCB0aGUgZm9y bS4iO3M6MzoibWQ1IjtzOjMyOiJkMjY1NTMyOGM5NmMyMjAxY2NiOGE5YTJlMmQ0NmY1ZiI7 fQ==