# afw_events-0.1 v0.1 # Manage events without additional Databases. # AllFlashWebsite.com # http://www.allflashwebsite.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMC4xIjtzOjY6ImF1dGhvciI7czoxOToiQWxsRmxh c2hXZWJzaXRlLmNvbSI7czoxMDoiYXV0aG9yX3VyaSI7czozMDoiaHR0cDovL3d3dy5hbGxm bGFzaHdlYnNpdGUuY29tIjtzOjExOiJkZXNjcmlwdGlvbiI7czo0MzoiTWFuYWdlIGV2ZW50 cyB3aXRob3V0IGFkZGl0aW9uYWwgRGF0YWJhc2VzLiI7czo0OiJ0eXBlIjtpOjE7czo0OiJu YW1lIjtzOjE0OiJhZndfZXZlbnRzLTAuMSI7czo0OiJoZWxwIjtzOjE1NTI6Igk8aDI+VGhl IDxjb2RlPmFmd19ldmVudHM8L2NvZGU+IGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuYWxsZmxh c2h3ZWJzaXRlLmNvbSI+QWxsRmxhc2hXZWJzaXRlLmNvbTwvYT48L2gyPgoKCTxwPlVzZSB0 aGlzIHBsdWdpbiB0byBtYW5hZ2UgYXJ0aWNsZS1iYXNlZCBldmVudHMuPC9wPgoKICAgIDxo ND5JbnN0YWxsYXRpb248L2g0PgogICAgPHA+SW5zdGFsbCB1c2luZyB0aGUgQWRtaW4gY29u dHJvbCBwYW5lbC4gVGhlbiwgY3JlYXRlIGEgc2VjdGlvbiBuYW1lZCA8c3Ryb25nPmdpZ3M8 L3N0cm9uZz4uIFtUaGlzIHNlY3Rpb24KICAgIG5hbWUgY2FuIGJlIGN1c3RvbWl6ZWQgb25s eSBieSBtb2RpZnlpbmcgdGhlIGNvZGUgZGlyZWN0bHkgKHRvZG86IG1ha2UgZWFzaWVyKS5d PGJyLz4KICAgIENvcHkgaWNvLWV2ZW50cy1kZWZhdWx0LnBuZyB0byB0aGUgL2ltYWdlcy8g ZGlyIG9uIHRoZSBzZXJ2ZXIgKHNvcnJ5KS48YnIvPgogICAgRmluYWxseSwgY3JlYXRlIGFu IGFydGljbGUgaW4gdGhlIGdpZ3Mgc2VjdGlvbiwgdGhlIHBsdWdpbiByZXF1aXJlcyBhdCBs ZWFzdCBvbmUgYXJ0aWNsZSB0byBnZXQgc3RhcnRlZC4KICAgIFlvdSB3aWxsIGNvcHkgdGhp cyBhcnRpY2xlIChldmVudCkgdG8gY3JlYXRlIG5ldyBhcnRpY2xlcyAoZXZlbnRzKS48YnIv PgogICAgT3B0aW9uYWw6IENoYW5nZSB0aGUgY3VzdG9tIGZpZWxkIG5hbWVzIGluIDxzdHJv bmc+QWRtaW4gPiBQcmVmZXJlbmNlcyA+IEFkdmFuY2VkPC9zdHJvbmc+IHdoZXJlOyBjdXN0 b20xOiBpY29uLCBjdXN0b20yOiBnZW5yZTwvcD4KCiAgICAgPHA+Tk9URTogVGhlIGZpcnN0 IDIgY3VzdG9tIGZpZWxkcyBuZWVkIHRvIGJlIHVzZWQgZm9yIHRoaXMgcGx1Z2luLiBJZiB5 b3UgaGF2ZSBhbHJlYWR5IG5hbWVkIHRoZW0sIGl0IHNob3VsZCBiZSBPSy4gKHRvZG86IGNv bmZpcm0gdGhpcyk8L3A+CgoJPHA+Tk9URTogVGhpcyBwbHVnaW4gZG9lcyBub3QgcmVzcGVj dCB1c2VyIHByaXZsZWFnZXMhIElmIGEgdXNlciBjYW4gYWNjZXNzIEFGVyBFdmVudHMsCiAg ICBoZSBtYXkgYmUgYWJsZSB0byBtb2RpZnkgb3IgZGVsZXRlIGFueSAoZXZlbnQpIGFydGlj bGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBoZSB3YXMgdGhlCiAgICBvcmlnaW5h bCBhdXRob3Igb3Igbm90LjwvcD4KCgk8cD5OT1RFOiBXaGVuIG1ha2luZyBjaGFuZ2VzIHRv IGFuIGV2ZW50LCB0aGlzIHBsdWdpbiB3aWxsIHVwZGF0ZSB0aGUgbGFzdCBtb2RpZmllZCBk YXRlIGFuZCB1c2VyIG9ubHkKICAgIHNvbWV0aW1lcyEgKFdpbGwgdXBkYXRlIHdoZW4gbW9k aWZ5aW5nIFRpdGxlLCBCb2R5LCBFeGNlcnB0LCBvciBjdXN0b21fMikuPC9wPgoKCTxwPk5P VEU6IFRoZXJlIG1heSBiZSBhIHByb2JsZW0gd2l0aCB0aGlzIHBsdWdpbiBhZGRpbmcgdGhl IHRhYiB0byBleHRlbnNpb25zLAogICAgYnV0IHlvdSB3aWxsIGJlIGFibGUgdG8gYWNjZXNz IGl0IGZyb20gdGhlIGRyb3Bkb3duIGxpc3QgaW4gdGhlIHVwcGVyLXJpZ2h0IGhhbmQgY29y bmVyLgogICAgKG5lZWQgdG8gZml4IHRoaXMpPC9wPgoiO3M6NDoiY29kZSI7czozNDAwNzoi Ly8gd3d3LkFsbEZsYXNoV2Vic2l0ZS5jb20KCgoKCgoKCgoKCgoKaWYoQHR4cGludGVyZmFj ZSA9PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ2Fmd19ldmVudHMnLCcxLDIsMycpOwoJcmVn aXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ2Fmd19ldmVudHMnLCAnQUZXIEV2ZW50cycpOwoJ cmVnaXN0ZXJfY2FsbGJhY2soJ2Fmd19ldmVudHMnLCAnYWZ3X2V2ZW50cycpOwp9CgovLyBL ZWVwIHRyYWNrIG9mIG5ld2x5IGNyZWF0ZWQgZXZlbnQKZ2xvYmFsICRuZXdFdmVudElkOwpn bG9iYWwgJGFmd19ldmVudHNfc2VjdGlvbjsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vIFNlY3Rpb24gQXJ0 aWNsZXMgd2lsbCByZXNpZGUgaW4KJGFmd19ldmVudHNfc2VjdGlvbiA9ICJnaWdzIjsKCi8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KCi8vCi8vCi8vIE1BSU4gUExVR0lOIEZVTkNUSU9OCi8vCi8vCmZ1bmN0aW9u IGFmd19ldmVudHMgKCRldmVudCwgJHN0ZXApIHsKICAgIGlmICgkc3RlcCA9PSAnanNvbicp IHsKICAgICAgICBvYl9zdGFydCgiX2Fmd19ldmVudHNfanNvbl9yZXBsYWNlIik7CiAgICAg ICAgX2Fmd19ldmVudHNfanNvbigpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBp bnNlcnQgc3R1ZmYgaW4gaGVhZCBzZWN0aW9uCiAgICBvYl9zdGFydCgiX2Fmd19hZG1pbmNz cyIpOwoKICAgIGlmKCAhJHN0ZXAgb3IgIWluX2FycmF5KCAkc3RlcCAsIGFycmF5KCd2aWV3 X2V2ZW50cycsICdhZndfZXZlbnRzX2NvcHknLCAnYWZ3X2V2ZW50c19QdGltZV91cGRhdGUn LCAnYWZ3X2V2ZW50c19QZGF0ZV91cGRhdGUnLCAnYWZ3X2V2ZW50c19JY29fdXBkYXRlJywg J2Fmd19ldmVudHNfRGVsJywgJ2Fmd19ldmVudHNfSW1nX3VwZGF0ZScpICkgKSB7CgkJdmll d19ldmVudHMoKTsKICAgIH0gZWxzZSB7CgkJJHN0ZXAoKTsKICAgIH0KfQoKLy8KLy8KLy8g U1RFUCBGVU5DVElPTlMKLy8KLy8KZnVuY3Rpb24gYWZ3X2V2ZW50c19QdGltZV91cGRhdGUo KSB7CiAgICAkaWQgPSBncHMoJ2lkJyk7CiAgICAkbmV3VGltZSA9IGdwcygnbmV3VGltZScp OwoKICAgICRtc2cgPSBfYWZ3X2V2ZW50c19QdGltZV91cGRhdGUoJGlkLCAkbmV3VGltZSk7 CiAgICBfYWZ3X2xpc3RfZXZlbnRzKCRtc2cpOwp9CgpmdW5jdGlvbiBhZndfZXZlbnRzX1Bk YXRlX3VwZGF0ZSgpIHsKICAgICRpZCA9IGdwcygnaWQnKTsKICAgICRuZXdEYXRlID0gZ3Bz KCduZXdEYXRlJyk7CgogICAgJG1zZyA9IF9hZndfZXZlbnRzX1BkYXRlX3VwZGF0ZSgkaWQs ICRuZXdEYXRlKTsKICAgIF9hZndfbGlzdF9ldmVudHMoJG1zZyk7Cn0KCmZ1bmN0aW9uIGFm d19ldmVudHNfSWNvX3VwZGF0ZSgkbWVzc2FnZT0nJykgewogICAgJGlkID0gZ3BzKCdpZCcp OwogICAgJG5ld0ljbyA9IGdwcygnbmV3SWNvJyk7CgogICAgJG1zZyA9IF9hZndfZXZlbnRz X0ljb191cGRhdGUoJGlkLCAkbmV3SWNvKTsKICAgIF9hZndfbGlzdF9ldmVudHMoJG1zZyk7 Cn0KCmZ1bmN0aW9uIGFmd19ldmVudHNfSW1nX3VwZGF0ZSgpIHsKICAgICRpZCA9IGdwcygn aWQnKTsKICAgICRuZXdJbWcgPSBncHMoJ25ld0ltZycpOwoKICAgICRtc2cgPSBfYWZ3X2V2 ZW50c19JbWdfdXBkYXRlKCRpZCwgJG5ld0ltZyk7CiAgICBfYWZ3X2xpc3RfZXZlbnRzKCRt c2cpOwp9CgpmdW5jdGlvbiBhZndfZXZlbnRzX0RlbCgpIHsKICAgICRpZCA9IGdwcygnaWQn KTsKCiAgICAkbXNnID0gX2Fmd19ldmVudHNfRGVsKCRpZCk7CiAgICBfYWZ3X2xpc3RfZXZl bnRzKCRtc2cpOwp9CgpmdW5jdGlvbiBhZndfZXZlbnRzX2NvcHkoKSB7CiAgICAkaWQgPSBn cHMoJ2lkJyk7CiAgICAkbmV3RGF0ZSA9IGdwcygnbmV3RGF0ZScpOwoKICAgICRtc2cgPSBf YWZ3X2V2ZW50c19jb3B5KCRpZCwgJG5ld0RhdGUpOwogICAgX2Fmd19saXN0X2V2ZW50cygk bXNnKTsKfQoKZnVuY3Rpb24gdmlld19ldmVudHMoKSB7CiAgICBfYWZ3X2xpc3RfZXZlbnRz KCk7Cn0KCi8vCi8vCi8vIENTUy9KUyBTQ1JJUFQgRlVOQ1RJT05TCi8vCi8vCgovLyBpbnNl cnRzIHN0dWZmIGluIGhlYWQgc2VjdGlvbgpmdW5jdGlvbiBfYWZ3X2FkbWluY3NzKCRidWZm ZXIpewogICAgZ2xvYmFsICRldmVudDsKCiAgICAkc3R5bGUgPSBfYWZ3X2V2ZW50c19zdHls ZSgpOwogICAgJHJldCA9IHN0cl9yZXBsYWNlKCI8L2hlYWQ+IiwgIlxuJHN0eWxlXG48L2hl YWQ+IiwgJGJ1ZmZlcik7CiAgICAkcmV0ID0gc3RyX3JlcGxhY2UoJzxib2R5JywgIjxib2R5 IGNsYXNzPVwieXVpLXNraW4tc2FtXCIiLCAkcmV0KTsKICAgIHJldHVybiAkcmV0Owp9Cgpm dW5jdGlvbiBfYWZ3X2V2ZW50c19zdHlsZSgpIHsKICAgIHJldHVybiAnCgk8bGluayByZWw9 InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8veXVpLnlhaG9vYXBp cy5jb20vMi41LjEvYnVpbGQvY29udGFpbmVyL2Fzc2V0cy9za2lucy9zYW0vY29udGFpbmVy LmNzcyI+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJo dHRwOi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvYnV0dG9uL2Fzc2V0cy9za2lu cy9zYW0vYnV0dG9uLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl eHQvY3NzIiBocmVmPSJodHRwOi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvZm9u dHMvZm9udHMtbWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i dGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly95dWkueWFob29hcGlzLmNvbS8yLjUuMS9idWlsZC9t ZW51L2Fzc2V0cy9za2lucy9zYW0vbWVudS5jc3MiPgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0 IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3l1aS55YWhvb2FwaXMuY29tLzIuNS4x L2J1aWxkL2NhbGVuZGFyL2Fzc2V0cy9za2lucy9zYW0vY2FsZW5kYXIuY3NzIiAvPgoKCTxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly95dWkueWFob29hcGlz LmNvbS8yLjUuMS9idWlsZC91dGlsaXRpZXMvdXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KCTxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly95dWkueWFob29hcGlz LmNvbS8yLjUuMS9idWlsZC95YWhvby1kb20tZXZlbnQveWFob28tZG9tLWV2ZW50LmpzIj48 L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly95 dWkueWFob29hcGlzLmNvbS8yLjUuMS9idWlsZC9jb250YWluZXIvY29udGFpbmVyLW1pbi5q cyI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRw Oi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvYnV0dG9uL2J1dHRvbi1taW4uanMi Pjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDov L3l1aS55YWhvb2FwaXMuY29tLzIuNS4xL2J1aWxkL2NhbGVuZGFyL2NhbGVuZGFyLW1pbi5q cyI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRw Oi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvbWVudS9tZW51LW1pbi5qcyI+PC9z Y3JpcHQ+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3l1 aS55YWhvb2FwaXMuY29tLzIuNS4xL2J1aWxkL3lhaG9vL3lhaG9vLW1pbi5qcyI+PC9zY3Jp cHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8veXVpLnlh aG9vYXBpcy5jb20vMi41LjEvYnVpbGQvZXZlbnQvZXZlbnQtbWluLmpzIj48L3NjcmlwdD4K CTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly95dWkueWFob29h cGlzLmNvbS8yLjUuMS9idWlsZC9jb25uZWN0aW9uL2Nvbm5lY3Rpb24tbWluLmpzIj48L3Nj cmlwdD4KCgk8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJo dHRwOi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvbG9nZ2VyL2Fzc2V0cy9za2lu cy9zYW0vbG9nZ2VyLmNzcyI+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj PSJodHRwOi8veXVpLnlhaG9vYXBpcy5jb20vMi41LjEvYnVpbGQvbG9nZ2VyL2xvZ2dlci1t aW4uanMiPjwvc2NyaXB0PgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAg LmNvcHlfY29udGFpbmVyIHsgcG9zaXRpb246YWJzb2x1dGU7IH0KICAgICAgICAuY29weUNh bENvbnQgeyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjVweDsgdG9w OjVweDsgei1pbmRleDoyOyB9CiAgICAgICAgLnBkYXRlX2NvbnRhaW5lciB7IHBvc2l0aW9u OmFic29sdXRlOyB9CiAgICAgICAgLnBkYXRlQ2FsQ29udCB7IGRpc3BsYXk6bm9uZTsgcG9z aXRpb246YWJzb2x1dGU7IGxlZnQ6NXB4OyB0b3A6NXB4OyB6LWluZGV4OjI7IH0KICAgICAg ICAuY29weUJ0biAgeyBmb250LXNpemU6IDAuOWVtOyB9CiAgICAgICAgLnZpZXdCdG4gIHsg Zm9udC1zaXplOiAwLjllbTsgfQogICAgICAgIC5leGNlcnB0IHsgZm9udC1zaXplOiAwLjdl bTsgfQogICAgICAgIC51cmxfdGl0bGUgeyBmb250LXNpemU6IDAuNzVlbTsgfQoJCS5FZEJ0 biAgeyBmb250LXNpemU6IDAuOTVlbTsgfQogICAgICAgIGxhYmVsIHsgZGlzcGxheTpibG9j aztmbG9hdDpsZWZ0O3dpZHRoOjQ1JTtjbGVhcjpsZWZ0OyB9CiAgICAgICAgLmNsZWFyIHsg Y2xlYXI6Ym90aDsgfQogICAgPC9zdHlsZT4KICAgICc7Cn0KCmZ1bmN0aW9uIF9hZndfbGlz dF9qcygkcm93cykgewogICAgJHJldCA9ICcKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij4KCVlBSE9PLm5hbWVzcGFjZSgiQUZXRXZlbnRzIik7CgogICAgWUFIT08uQUZX RXZlbnRzLmNvcHlfY2Fsc2VsZWN0ID0gZnVuY3Rpb24gKHBfc1R5cGUsIHBfYUFyZ3MpIHsK ICAgICAgICB2YXIgYURhdGU7CgogICAgICAgIGlmIChwX2FBcmdzKSB7CgogICAgICAgICAg ICBhRGF0ZSA9IHBfYUFyZ3NbMF1bMF07CiAgICAgICAgICAgIHZhciBtb250aCA9IGFEYXRl WzFdOwogICAgICAgICAgICB2YXIgZGF5ID0gYURhdGVbMl07CiAgICAgICAgICAgIHZhciB5 ZWFyID0gYURhdGVbMF07CgogICAgICAgICAgICB2YXIgbmV3RGF0ZSA9IHllYXIrIi0iK21v bnRoKyItIitkYXk7CgogICAgICAgICAgICBZQUhPTy5BRldFdmVudHMubXljYWwuaGlkZSgp OwogICAgICAgICAgICAvL2FsZXJ0KG1vbnRoKyIvIitkYXkrIi8iK3llYXIrIiAiK1lBSE9P LkFGV0V2ZW50cy5jbGlja0lkKTsKICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZSgiP2V2 ZW50PWFmd19ldmVudHMmc3RlcD1hZndfZXZlbnRzX2NvcHkmbmV3RGF0ZT0iK25ld0RhdGUr IiZpZD0iK1lBSE9PLkFGV0V2ZW50cy5jbGlja0lkKTsKICAgICAgICB9CiAgICB9CgogICAg WUFIT08uQUZXRXZlbnRzLnVwZGF0ZV9oYW5kbGVTdWNjZXNzID0gZnVuY3Rpb24obykgewog ICAgICAgIFlBSE9PLmxvZygicm93IitZQUhPTy5BRldFdmVudHMuY2xpY2tJZCk7CiAgICAg ICAgWUFIT08ubG9nKCBvLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoInJvdyIrWUFIT08uQUZXRXZlbnRzLmNsaWNrSWQpLmlubmVySFRNTCA9IG8u cmVzcG9uc2VUZXh0OwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb3ciK1lB SE9PLkFGV0V2ZW50cy5jbGlja0lkKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiI2ZlZSI7 CiAgICB9OwogICAgWUFIT08uQUZXRXZlbnRzLnVwZGF0ZV9oYW5kbGVGYWlsdXJlID0gZnVu Y3Rpb24obykgewogICAgICAgIGFsZXJ0KCJTdWJtaXNzaW9uIGZhaWxlZDogIiArIG8uc3Rh dHVzKTsKICAgIH07CgogICAgWUFIT08uQUZXRXZlbnRzLnBkYXRlX2NhbHNlbGVjdCA9IGZ1 bmN0aW9uIChwX3NUeXBlLCBwX2FBcmdzKSB7CiAgICAgICAgdmFyIGFEYXRlOwoKICAgICAg ICBpZiAocF9hQXJncykgewogICAgICAgICAgICBhRGF0ZSA9IHBfYUFyZ3NbMF1bMF07CiAg ICAgICAgICAgIHZhciBtb250aCA9IGFEYXRlWzFdOwogICAgICAgICAgICB2YXIgZGF5ID0g YURhdGVbMl07CiAgICAgICAgICAgIHZhciB5ZWFyID0gYURhdGVbMF07CgogICAgICAgICAg ICB2YXIgbmV3RGF0ZSA9IHllYXIrIi0iK21vbnRoKyItIitkYXk7CgogICAgICAgICAgICBZ QUhPTy5BRldFdmVudHMubXljYWwuaGlkZSgpOwogICAgICAgICAgICBsb2NhdGlvbi5yZXBs YWNlKCI/ZXZlbnQ9YWZ3X2V2ZW50cyZzdGVwPWFmd19ldmVudHNfUGRhdGVfdXBkYXRlJm5l d0RhdGU9IituZXdEYXRlKyImaWQ9IitZQUhPTy5BRldFdmVudHMuY2xpY2tJZCk7CiAgICAg ICAgfQogICAgfQoKICAgIFlBSE9PLkFGV0V2ZW50cy5QdGltZU1lbnVfb25DbGljayA9IGZ1 bmN0aW9uKHBfc1R5cGUsIHBfYUFyZ3MpIHsKICAgICAgICB2YXIgb0V2ZW50ID0gcF9hQXJn c1swXSwgICAgLy8gRE9NIEV2ZW50CiAgICAgICAgICAgIG9NZW51SXRlbSA9IHBfYUFyZ3Nb MV07IC8vIFlBSE9PLndpZGdldC5NZW51SXRlbSBpbnN0YW5jZQogICAgICAgICBZQUhPTy51 dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KG9FdmVudCk7CgogICAgICAgIC8vIElmIGEgTWVu dUl0ZW0gd2FzIGNsaWNrZWQuLi4KICAgICAgICBpZiAob01lbnVJdGVtKSB7CiAgICAgICAg ICAgIHZhciBuZXdUaW1lID0gb01lbnVJdGVtLmNmZy5nZXRQcm9wZXJ0eSgidGV4dCIpOwog ICAgICAgICAgICAvL2FsZXJ0KCIoIitZQUhPTy5BRldFdmVudHMuY2xpY2tJZCsiKSAiK25l d1RpbWUpOwogICAgICAgICAgICAvL2xvY2F0aW9uLnJlcGxhY2UoIj9ldmVudD1hZndfZXZl bnRzJnN0ZXA9YWZ3X2V2ZW50c19QdGltZV91cGRhdGUmbmV3VGltZT0iK25ld1RpbWUrIiZp ZD0iK1lBSE9PLkFGV0V2ZW50cy5jbGlja0lkKTsKICAgICAgICAgICAgdmFyIGNhbGxiYWNr ID0geyBzdWNjZXNzOllBSE9PLkFGV0V2ZW50cy51cGRhdGVfaGFuZGxlU3VjY2VzcywgZmFp bHVyZTpZQUhPTy5BRldFdmVudHMudXBkYXRlX2hhbmRsZUZhaWx1cmUgfTsKICAgICAgICAg ICAgdmFyIHNVcmwgPSAiaW5kZXgucGhwP2V2ZW50PWFmd19ldmVudHMmc3RlcD1qc29uJmY9 UHRpbWVVcGRhdGUmbmV3VGltZT0iK25ld1RpbWUrIiZpZD0iK1lBSE9PLkFGV0V2ZW50cy5j bGlja0lkOwogICAgICAgICAgICB2YXIgcmVxdWVzdCA9IFlBSE9PLnV0aWwuQ29ubmVjdC5h c3luY1JlcXVlc3QoIkdFVCIsIHNVcmwsIGNhbGxiYWNrKTsKICAgICAgICB9CiAgICB9Cgog ICAgWUFIT08uQUZXRXZlbnRzLkljb01lbnVfb25DbGljayA9IGZ1bmN0aW9uKHBfc1R5cGUs IHBfYUFyZ3MpIHsKICAgICAgICB2YXIgb0V2ZW50ID0gcF9hQXJnc1swXSwgICAgLy8gRE9N IEV2ZW50CiAgICAgICAgICAgIG9NZW51SXRlbSA9IHBfYUFyZ3NbMV07IC8vIFlBSE9PLndp ZGdldC5NZW51SXRlbSBpbnN0YW5jZQogICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnByZXZl bnREZWZhdWx0KG9FdmVudCk7CgogICAgICAgIC8vIElmIGEgTWVudUl0ZW0gd2FzIGNsaWNr ZWQuLi4KICAgICAgICBpZiAob01lbnVJdGVtKSB7CiAgICAgICAgICAgIHZhciBuZXdJY28g PSBvTWVudUl0ZW0uY2ZnLmdldFByb3BlcnR5KCJ0ZXh0Iik7CiAgICAgICAgICAgIC8vYWxl cnQoIigiK1lBSE9PLkFGV0V2ZW50cy5jbGlja0lkKyIpICIrbmV3SWNvKTsKICAgICAgICAg ICAgaWYgKG5ld0ljbyA9PSAiTWFuYWdlIEljb25zLi4uIikgewogICAgICAgICAgICAgICAg bG9jYXRpb24ucmVwbGFjZSgiP3NlYXJjaF9tZXRob2Q9Y2F0ZWdvcnkmY3JpdD1pY29uJmV2 ZW50PWltYWdlJnN0ZXA9aW1hZ2VfbGlzdCZzZWFyY2g9R28iKTsKICAgICAgICAgICAgfSBl bHNlIHsKICAgICAgICAgICAgICAgIC8vbG9jYXRpb24ucmVwbGFjZSgiP2V2ZW50PWFmd19l dmVudHMmc3RlcD1hZndfZXZlbnRzX0ljb191cGRhdGUmbmV3SWNvPSIrbmV3SWNvKyImaWQ9 IitZQUhPTy5BRldFdmVudHMuY2xpY2tJZCk7CiAgICAgICAgICAgICAgICB2YXIgY2FsbGJh Y2sgPSB7IHN1Y2Nlc3M6WUFIT08uQUZXRXZlbnRzLnVwZGF0ZV9oYW5kbGVTdWNjZXNzLCBm YWlsdXJlOllBSE9PLkFGV0V2ZW50cy51cGRhdGVfaGFuZGxlRmFpbHVyZSB9OwogICAgICAg ICAgICAgICAgdmFyIHNVcmwgPSAiaW5kZXgucGhwP2V2ZW50PWFmd19ldmVudHMmc3RlcD1q c29uJmY9aWNvVXBkYXRlJm5ld0ljbz0iK25ld0ljbysiJmlkPSIrWUFIT08uQUZXRXZlbnRz LmNsaWNrSWQ7CiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IFlBSE9PLnV0aWwuQ29u bmVjdC5hc3luY1JlcXVlc3QoIkdFVCIsIHNVcmwsIGNhbGxiYWNrKTsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgIH0KCiAgICBZQUhPTy5BRldFdmVudHMuSW1nTWVudV9vbkNsaWNr ID0gZnVuY3Rpb24ocF9zVHlwZSwgcF9hQXJncykgewogICAgICAgIHZhciBvRXZlbnQgPSBw X2FBcmdzWzBdLCAgICAvLyBET00gRXZlbnQKICAgICAgICAgICAgb01lbnVJdGVtID0gcF9h QXJnc1sxXTsgLy8gWUFIT08ud2lkZ2V0Lk1lbnVJdGVtIGluc3RhbmNlCiAgICAgICAgWUFI T08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChvRXZlbnQpOwoKICAgICAgICAvLyBJZiBh IE1lbnVJdGVtIHdhcyBjbGlja2VkLi4uCiAgICAgICAgaWYgKG9NZW51SXRlbSkgewogICAg ICAgICAgICB2YXIgbmV3SW1nID0gb01lbnVJdGVtLmNmZy5nZXRQcm9wZXJ0eSgidGV4dCIp OwogICAgICAgICAgICBpZiAobmV3SW1nID09ICJNYW5hZ2UgSW1hZ2VzLi4uIikgewogICAg ICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZSgiP3NlYXJjaF9tZXRob2Q9Y2F0ZWdvcnkm Y3JpdD1ldmVudCZldmVudD1pbWFnZSZzdGVwPWltYWdlX2xpc3Qmc2VhcmNoPUdvIik7CiAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL2xvY2F0aW9uLnJlcGxhY2Uo Ij9ldmVudD1hZndfZXZlbnRzJnN0ZXA9YWZ3X2V2ZW50c19JbWdfdXBkYXRlJm5ld0ltZz0i K25ld0ltZysiJmlkPSIrWUFIT08uQUZXRXZlbnRzLmNsaWNrSWQpOwogICAgICAgICAgICAg ICAgdmFyIGNhbGxiYWNrID0geyBzdWNjZXNzOllBSE9PLkFGV0V2ZW50cy51cGRhdGVfaGFu ZGxlU3VjY2VzcywgZmFpbHVyZTpZQUhPTy5BRldFdmVudHMudXBkYXRlX2hhbmRsZUZhaWx1 cmUgfTsKICAgICAgICAgICAgICAgIHZhciBzVXJsID0gImluZGV4LnBocD9ldmVudD1hZndf ZXZlbnRzJnN0ZXA9anNvbiZmPWltZ1VwZGF0ZSZuZXdJbWc9IituZXdJbWcrIiZpZD0iK1lB SE9PLkFGV0V2ZW50cy5jbGlja0lkOwogICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBZ QUhPTy51dGlsLkNvbm5lY3QuYXN5bmNSZXF1ZXN0KCJHRVQiLCBzVXJsLCBjYWxsYmFjayk7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgWUFIT08uQUZXRXZlbnRzLmVk RGlhZ19oYW5kbGVTdWJtaXQgPSBmdW5jdGlvbigpIHsgdGhpcy5zdWJtaXQoKTsgfTsKICAg IFlBSE9PLkFGV0V2ZW50cy5lZERpYWdfaGFuZGxlQ2FuY2VsID0gZnVuY3Rpb24oKSB7IHRo aXMuY2FuY2VsKCk7IH07CiAgICBZQUhPTy5BRldFdmVudHMuZWREaWFnX2hhbmRsZVN1Y2Nl c3MgPSBmdW5jdGlvbihvKSB7CiAgICAgICAgWUFIT08ubG9nKCJyb3ciK1lBSE9PLkFGV0V2 ZW50cy5jbGlja0lkKTsKICAgICAgICBZQUhPTy5sb2coIG8ucmVzcG9uc2VUZXh0KTsKICAg ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm93IitZQUhPTy5BRldFdmVudHMuY2xp Y2tJZCkuaW5uZXJIVE1MID0gby5yZXNwb25zZVRleHQ7CiAgICAgICAgZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoInJvdyIrWUFIT08uQUZXRXZlbnRzLmNsaWNrSWQpLnN0eWxlLmJhY2tn cm91bmRDb2xvciA9ICIjZmVlIjsKICAgIH07CiAgICBZQUhPTy5BRldFdmVudHMuZWREaWFn X2hhbmRsZUZhaWx1cmUgPSBmdW5jdGlvbihvKSB7CiAgICAgICAgYWxlcnQoIlN1Ym1pc3Np b24gZmFpbGVkOiAiICsgby5zdGF0dXMpOwogICAgfTsKCVlBSE9PLkFGV0V2ZW50cy5lZGl0 X2hhbmRsZVN1Y2Nlc3MgPSBmdW5jdGlvbihvKSB7CgkJaWYoby5yZXNwb25zZVRleHQgIT09 IHVuZGVmaW5lZCl7CiAgICAgICAgICAgIFlBSE9PLmxvZyggby5yZXNwb25zZVRleHQpOwoJ CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdENvbnQiKS5pbm5lckhUTUwgPSBvLnJl c3BvbnNlVGV4dDsKCgkJCVlBSE9PLkFGV0V2ZW50cy5lZGl0RGlhZyA9IG5ldyBZQUhPTy53 aWRnZXQuRGlhbG9nKCJlZGl0Q29udCIsCgkJCQkJCQkJCXsgd2lkdGggOiAiNTBlbSIsCgkJ CQkJCQkJCSAgZml4ZWRjZW50ZXIgOiB0cnVlLAoJCQkJCQkJCQkgIHZpc2libGUgOiBmYWxz ZSwKCQkJCQkJCQkJICBjb25zdHJhaW50b3ZpZXdwb3J0IDogdHJ1ZSwKCQkJCQkJCQkJICBi dXR0b25zIDogWyB7IHRleHQ6IlNhdmUiLCBoYW5kbGVyOllBSE9PLkFGV0V2ZW50cy5lZERp YWdfaGFuZGxlU3VibWl0LCBpc0RlZmF1bHQ6dHJ1ZSB9LAoJCQkJCQkJCQkJCSAgeyB0ZXh0 OiJDYW5jZWwiLCBoYW5kbGVyOllBSE9PLkFGV0V2ZW50cy5lZERpYWdfaGFuZGxlQ2FuY2Vs IH0gXQoJCQkJCQkJCQl9KTsKCgkJCVlBSE9PLkFGV0V2ZW50cy5lZGl0RGlhZy5jYWxsYmFj ayA9IHsgc3VjY2VzczogWUFIT08uQUZXRXZlbnRzLmVkRGlhZ19oYW5kbGVTdWNjZXNzLCBm YWlsdXJlOiBZQUhPTy5BRldFdmVudHMuZWREaWFnX2hhbmRsZUZhaWx1cmUgfTsKCQkJWUFI T08uQUZXRXZlbnRzLmVkaXREaWFnLnJlbmRlcigpOwoJCQlZQUhPTy5BRldFdmVudHMuZWRp dERpYWcuc2hvdygpOwoJCX0KCX07CgoJWUFIT08uQUZXRXZlbnRzLmVkaXRfaGFuZGxlRmFp bHVyZSA9IGZ1bmN0aW9uKG8pIHsKCQlpZihvLnJlc3BvbnNlVGV4dCAhPT0gdW5kZWZpbmVk KXsKCQkJYWxlcnQoIkZhaWxlZCEgIitvKTsKCQl9Cgl9CgogICAgWUFIT08uQUZXRXZlbnRz LmVkVGlwX2hhbmRsZVN1Y2Nlc3MgPSBmdW5jdGlvbihvKSB7CgkJaWYoby5yZXNwb25zZVRl eHQgIT09IHVuZGVmaW5lZCl7CiAgICAgICAgICAgIFlBSE9PLmxvZyggby5yZXNwb25zZVRl eHQpOwoKICAgICAgICAgICAgWUFIT08uQUZXRXZlbnRzLnR0Qi5jZmcuc2V0UHJvcGVydHko ImRpc2FibGVkIiwgZmFsc2UpOwogICAgICAgICAgICBZQUhPTy5BRldFdmVudHMudHRCLmNm Zy5zZXRQcm9wZXJ0eSgidGV4dCIsIG8ucmVzcG9uc2VUZXh0ICk7CiAgICAgICAgICAgIFlB SE9PLkFGV0V2ZW50cy50dEIuZG9TaG93KCk7CgkJfQoJfTsKCVlBSE9PLkFGV0V2ZW50cy5l ZFRpcF9oYW5kbGVGYWlsdXJlID0gZnVuY3Rpb24obykgeyBpZihvLnJlc3BvbnNlVGV4dCAh PT0gdW5kZWZpbmVkKXsgWUFIT08ubG9nKCBvLnJlc3BvbnNlVGV4dCk7ICB9IH0KCiAgICBZ QUhPTy5BRldFdmVudHMubGlzdF9vbkNsaWNrID0gZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAg dmFyIGVsVGFyZ2V0ID0gWUFIT08udXRpbC5FdmVudC5nZXRUYXJnZXQoZXZ0KTsKCiAgICAg ICAgWUFIT08uQUZXRXZlbnRzLmNsaWNrSWQgPSBlbFRhcmdldC5pZDsKCiAgICAgICAgaWYo ZWxUYXJnZXQuY2xhc3NOYW1lID09ICJjb3B5QnRuIikgewogICAgICAgICAgICB2YXIgaWQg PSBlbFRhcmdldC5pZDsKICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVm YXVsdChldnQpOwogICAgICAgICAgICBZQUhPTy5BRldFdmVudHMubXljYWwgPSBuZXcgWUFI T08ud2lkZ2V0LkNhbGVuZGFyR3JvdXAoImNhbDEiLCJjb3B5Q2FsQ29udCIraWQsIHsgcGFn ZXM6MSwgdGl0bGU6IkNob29zZSBOZXcgRXZlbnQgRGF0ZToiLCBjbG9zZTp0cnVlIH0gKTsK ICAgICAgICAgICAgWUFIT08uQUZXRXZlbnRzLm15Y2FsLnNlbGVjdEV2ZW50LnN1YnNjcmli ZShZQUhPTy5BRldFdmVudHMuY29weV9jYWxzZWxlY3QpOwogICAgICAgICAgICBZQUhPTy5B RldFdmVudHMubXljYWwucmVuZGVyKCk7CiAgICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5t eWNhbC5zaG93KCk7CiAgICAgICAgfSBlbHNlIGlmKGVsVGFyZ2V0LmNsYXNzTmFtZSA9PSAi UGRhdGVCdXR0b24iKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGVsVGFyZ2V0LmlkOwogICAg ICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGV2dCk7CiAgICAgICAg ICAgIFlBSE9PLkFGV0V2ZW50cy5teWNhbCA9IG5ldyBZQUhPTy53aWRnZXQuQ2FsZW5kYXJH cm91cCgiY2FsMSIsInBkYXRlQ2FsQ29udCIraWQsIHsgcGFnZXM6MSwgdGl0bGU6IkNoYW5n ZSBFdmVudCBEYXRlOiIsIGNsb3NlOnRydWUgfSApOwogICAgICAgICAgICBZQUhPTy5BRldF dmVudHMubXljYWwuc2VsZWN0RXZlbnQuc3Vic2NyaWJlKFlBSE9PLkFGV0V2ZW50cy5wZGF0 ZV9jYWxzZWxlY3QpOwogICAgICAgICAgICBZQUhPTy5BRldFdmVudHMubXljYWwucmVuZGVy KCk7CiAgICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5teWNhbC5zaG93KCk7CiAgICAgICAg fSBlbHNlIGlmIChlbFRhcmdldC5jbGFzc05hbWUgPT0gIlB0aW1lQnV0dG9uIikgewogICAg ICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGV2dCk7CiAgICAgICAg ICAgIC8vIENyZWF0ZSBhIG5ldyBNZW51IGluc3RhbmNlCiAgICAgICAgICAgIGlmIChZQUhP Ty5BRldFdmVudHMub01lbnUgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBZQUhP Ty5BRldFdmVudHMub01lbnUgPSBuZXcgWUFIT08ud2lkZ2V0Lk1lbnUoIm15bWVudSIsIHsg c2Nyb2xsaW5jcmVtZW50OjIsIHBvc2l0aW9uOiAiZHluYW1pYyIgfSk7CiAgICAgICAgICAg ICAgICBZQUhPTy5BRldFdmVudHMub01lbnUuYWRkSXRlbXMoWyIxOTowMCIsICIxOTozMCIs ICIyMDowMCIsICIyMDozMCIsICIyMTowMCIsICIyMTozMCIsICIyMjowMCIsICIyMjozMCIs ICIyMzowMCJdKTsKICAgICAgICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5vTWVudS5yZW5k ZXIoZG9jdW1lbnQuYm9keSk7CiAgICAgICAgICAgICAgICBZQUhPTy5BRldFdmVudHMub01l bnUuc3Vic2NyaWJlKCJjbGljayIsIFlBSE9PLkFGV0V2ZW50cy5QdGltZU1lbnVfb25DbGlj ayk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHh5ID0gWUFIT08udXRpbC5FdmVu dC5nZXRYWShldnQpOwogICAgICAgICAgICBZQUhPTy5BRldFdmVudHMub01lbnUubW92ZVRv KHh5WzBdLCB4eVsxXSk7CiAgICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5vTWVudS5zaG93 KCk7CiAgICAgICAgfSBlbHNlIGlmIChlbFRhcmdldC5jbGFzc05hbWUgPT0gIkljb0J1dHRv biIpIHsKICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChldnQp OwogICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgTWVudSBpbnN0YW5jZQogICAgICAgICAg ICBpZiAoWUFIT08uQUZXRXZlbnRzLm9JY29NZW51ID09IHVuZGVmaW5lZCkgewogICAgICAg ICAgICAgICAgWUFIT08uQUZXRXZlbnRzLm9JY29NZW51ID0gbmV3IFlBSE9PLndpZGdldC5N ZW51KCJpY29tZW51IiwgeyBzY3JvbGxpbmNyZW1lbnQ6MTAsIHBvc2l0aW9uOiAiZHluYW1p YyIgfSk7CiAgICAgICAgICAgICAgICBZQUhPTy5BRldFdmVudHMub0ljb01lbnUuYWRkSXRl bXMoWycuX2Fmd19pY29ucygpLicsIk1hbmFnZSBJY29ucy4uLiJdKTsKICAgICAgICAgICAg ICAgIFlBSE9PLkFGV0V2ZW50cy5vSWNvTWVudS5yZW5kZXIoZG9jdW1lbnQuYm9keSk7CiAg ICAgICAgICAgICAgICBZQUhPTy5BRldFdmVudHMub0ljb01lbnUuc3Vic2NyaWJlKCJjbGlj ayIsIFlBSE9PLkFGV0V2ZW50cy5JY29NZW51X29uQ2xpY2spOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIHZhciB4eSA9IFlBSE9PLnV0aWwuRXZlbnQuZ2V0WFkoZXZ0KTsKICAgICAg ICAgICAgWUFIT08uQUZXRXZlbnRzLm9JY29NZW51Lm1vdmVUbyh4eVswXSwgeHlbMV0pOwog ICAgICAgICAgICBZQUhPTy5BRldFdmVudHMub0ljb01lbnUuc2hvdygpOwogICAgICAgIH0g ZWxzZSBpZiAoZWxUYXJnZXQuY2xhc3NOYW1lID09ICJJbWdCdXR0b24iKSB7CiAgICAgICAg ICAgIFlBSE9PLnV0aWwuRXZlbnQucHJldmVudERlZmF1bHQoZXZ0KTsKICAgICAgICAgICAg Ly8gQ3JlYXRlIGEgbmV3IE1lbnUgaW5zdGFuY2UKICAgICAgICAgICAgaWYgKFlBSE9PLkFG V0V2ZW50cy5vSW1nTWVudSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIFlBSE9P LkFGV0V2ZW50cy5vSW1nTWVudSA9IG5ldyBZQUhPTy53aWRnZXQuTWVudSgiaW1nbWVudSIs IHsgbWF4aGVpZ2h0OiA2MDAsIHNjcm9sbGluY3JlbWVudDo1MCwgcG9zaXRpb246ICJkeW5h bWljIiB9KTsKICAgICAgICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5vSW1nTWVudS5hZGRJ dGVtcyhbJy5fYWZ3X2ltYWdlcygpLicsIk1hbmFnZSBJbWFnZXMuLi4iXSk7CiAgICAgICAg ICAgICAgICBZQUhPTy5BRldFdmVudHMub0ltZ01lbnUucmVuZGVyKGRvY3VtZW50LmJvZHkp OwogICAgICAgICAgICAgICAgWUFIT08uQUZXRXZlbnRzLm9JbWdNZW51LnN1YnNjcmliZSgi Y2xpY2siLCBZQUhPTy5BRldFdmVudHMuSW1nTWVudV9vbkNsaWNrKTsKICAgICAgICAgICAg fQogICAgICAgICAgICB2YXIgeHkgPSBZQUhPTy51dGlsLkV2ZW50LmdldFhZKGV2dCk7CiAg ICAgICAgICAgIFlBSE9PLkFGV0V2ZW50cy5vSW1nTWVudS5tb3ZlVG8oeHlbMF0sIHh5WzFd KTsKICAgICAgICAgICAgWUFIT08uQUZXRXZlbnRzLm9JbWdNZW51LnNob3coKTsKICAgICAg ICB9IGVsc2UgaWYgKGVsVGFyZ2V0LmNsYXNzTmFtZSA9PSAiRGVsQnV0dG9uIikgewogICAg ICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGV2dCk7CiAgICAgICAg ICAgIGlmICggdmVyaWZ5KCJEZWxldGUgRXZlbnQ6IEFyZSB5b3Ugc3VyZT8iKSApIHsKICAg ICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoIj9ldmVudD1hZndfZXZlbnRzJnN0ZXA9 YWZ3X2V2ZW50c19EZWwmaWQ9IitZQUhPTy5BRldFdmVudHMuY2xpY2tJZCk7CiAgICAgICAg ICAgIH0KCiAgICAgICAgfSBlbHNlIGlmIChlbFRhcmdldC5jbGFzc05hbWUgPT0gIkVkQnRu IikgewogICAgICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGV2dCk7 CgoJCQl2YXIgY2FsbGJhY2sgPSB7CgkJCSAgCQlzdWNjZXNzOllBSE9PLkFGV0V2ZW50cy5l ZGl0X2hhbmRsZVN1Y2Nlc3MsCgkJCSAgCQlmYWlsdXJlOllBSE9PLkFGV0V2ZW50cy5lZGl0 X2hhbmRsZUZhaWx1cmUKCQkJfTsKCQkJdmFyIHNVcmwgPSAiaW5kZXgucGhwP2V2ZW50PWFm d19ldmVudHMmc3RlcD1qc29uJmY9ZWRpdEZvcm0maWQ9IitZQUhPTy5BRldFdmVudHMuY2xp Y2tJZDsKCQkJdmFyIHJlcXVlc3QgPSBZQUhPTy51dGlsLkNvbm5lY3QuYXN5bmNSZXF1ZXN0 KCJHRVQiLCBzVXJsLCBjYWxsYmFjayk7CgkJCS8vYWxlcnQoImVkaXQgYnV0dG9uIik7Cgog ICAgICAgIH0KICAgIH07CgogICAgWUFIT08uQUZXRXZlbnRzLmxpc3Rfb25PdmVyID0gZnVu Y3Rpb24oZXZ0KSB7CiAgICAgICAgdmFyIGVsVGFyZ2V0ID0gWUFIT08udXRpbC5FdmVudC5n ZXRUYXJnZXQoZXZ0KTsKICAgICAgICBZQUhPTy5BRldFdmVudHMuT3ZlcklkID0gZWxUYXJn ZXQuaWQ7CgogICAgICAgIGlmIChlbFRhcmdldC5jbGFzc05hbWUgPT0gIkVkQnRuIikgewog ICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB7IHN1Y2Nlc3M6WUFIT08uQUZXRXZlbnRzLmVk VGlwX2hhbmRsZVN1Y2Nlc3MsIGZhaWx1cmU6WUFIT08uQUZXRXZlbnRzLmVkVGlwX2hhbmRs ZUZhaWx1cmUgfTsKCQkJdmFyIHNVcmwgPSAiaW5kZXgucGhwP2V2ZW50PWFmd19ldmVudHMm c3RlcD1qc29uJmY9Z2V0Qm9keSZpZD0iK1lBSE9PLkFGV0V2ZW50cy5PdmVySWQ7CgkJCXZh ciByZXF1ZXN0ID0gWUFIT08udXRpbC5Db25uZWN0LmFzeW5jUmVxdWVzdCgiR0VUIiwgc1Vy bCwgY2FsbGJhY2spOwogICAgICAgICAgICBZQUhPTy5sb2coICJ0aXAuLi4iICk7CiAgICAg ICAgfSBlbHNlIHsKICAgICAgICAgICAgWUFIT08uQUZXRXZlbnRzLnR0Qi5jZmcuc2V0UHJv cGVydHkoImRpc2FibGVkIiwgdHJ1ZSk7CiAgICAgICAgfQogICAgfQoKCVlBSE9PLkFGV0V2 ZW50cy5teUluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICBZQUhPTy5BRldFdmVudHMudHRC ID0gbmV3IFlBSE9PLndpZGdldC5Ub29sdGlwKCJ0dEIiLCB7IGNvbnRleHQ6WyAibGlzdCIg XSB9KTsKCiAgICAgICAgWUFIT08udXRpbC5FdmVudC5vbigibGlzdCIsICJjbGljayIsIFlB SE9PLkFGV0V2ZW50cy5saXN0X29uQ2xpY2spOwogICAgICAgIFlBSE9PLnV0aWwuRXZlbnQu b24oImxpc3QiLCAibW91c2VvdmVyIiwgWUFIT08uQUZXRXZlbnRzLmxpc3Rfb25PdmVyKTsK ICAgIH07CgoJWUFIT08udXRpbC5FdmVudC5vbkRPTVJlYWR5KFlBSE9PLkFGV0V2ZW50cy5t eUluaXQpOwogICAgPC9zY3JpcHQ+CiAgICAnOwogICAgcmV0dXJuICRyZXQ7Cn0KCgovLwov LwovLyBCVVRUT04tQ1JFQVRJTkcgRlVOQ1RJT05TCi8vCi8vCgpmdW5jdGlvbiBfYWZ3X0Nv cHlWaWV3X2J1dHRvbigkaWQ9MCwgJHVybCkgewogICAgcmV0dXJuICcKICAgIDxhIGhyZWY9 IiMiIGNsYXNzPSJjb3B5QnRuIiBpZD0iJy4kaWQuJyI+W0NvcHldPC9hPgogICAgPGRpdiBj bGFzcz0iY29weV9jb250YWluZXIiIGlkPSJjb3B5X2NvbnRhaW5lcl8nLiRpZC4nIj4KICAg IDxkaXYgY2xhc3M9ImNvcHlDYWxDb250IiBpZD0iY29weUNhbENvbnQnLiRpZC4nIj48L2Rp dj4KICAgIDwvZGl2PgogICAgPGJyIC8+CiAgICA8YSBocmVmPSInLiR1cmwuJyIgY2xhc3M9 InZpZXdCdG4iPltWaWV3XTwvYT4KICAgIDwvZGl2PgogICAgJzsKfQoKZnVuY3Rpb24gX2Fm d19Qb3N0ZWRfYnV0dG9uKCRpZD0wLCAkUG9zdGVkKSB7CiAgICAkUG9zdGVkX2FyciA9IHNw bGl0KCIgIiwgJFBvc3RlZCk7CiAgICAkUG9zdGVkX2RhdGUgPSAkUG9zdGVkX2FyclswXTsK ICAgICRQb3N0ZWRfdGltZSA9ICRQb3N0ZWRfYXJyWzFdOwogICAgcmV0dXJuICcKICAgIDxh IGhyZWY9IiMiIGNsYXNzPSJQZGF0ZUJ1dHRvbiIgaWQ9IicuJGlkLiciPicuJFBvc3RlZF9k YXRlLic8L2E+CiAgICA8ZGl2IGNsYXNzPSJwZGF0ZV9jb250YWluZXIiIGlkPSJwZGF0ZV9j b250YWluZXJfJy4kaWQuJyI+CiAgICA8ZGl2IGNsYXNzPSJwZGF0ZUNhbENvbnQiIGlkPSJw ZGF0ZUNhbENvbnQnLiRpZC4nIj48L2Rpdj4KICAgIDwvZGl2Pjxici8+CiAgICA8YSBocmVm PSIiIGNsYXNzPSJQdGltZUJ1dHRvbiIgaWQ9IicuJGlkLiciPicuJFBvc3RlZF90aW1lLic8 L2E+CiAgICAnOwp9CgpmdW5jdGlvbiBfYWZ3X0ljb19idXR0b24oJGlkPTAsICRjdXN0b21f MSkgewogICAgaWYgKCRjdXN0b21fMSA9PSAiIikgewogICAgICAgIHJldHVybiAnCiAgICAg ICAgPGEgaHJlZj0iIiBjbGFzcz0iSWNvQnV0dG9uIiBpZD0iJy4kaWQuJyI+Jy4nPGltZyBj bGFzcz0iSWNvQnV0dG9uIiBpZD0iJy4kaWQuJyIgc3JjPSIvaW1hZ2VzL2ljby1ldmVudHMt ZGVmYXVsdC5wbmciIGhlaWdodD0iNDAiIHdpZHRoPSI0MCIgLz4nLic8L2E+CiAgICAgICAg JzsKICAgIH0gZWxzZSB7CiAgICAgICAgJGltZyA9IChzdWJzdHIoJGN1c3RvbV8xLDAsMSkg PT0gJy8nKSA/ICRjdXN0b21fMSA6ICcvJy4kY3VzdG9tXzE7CiAgICAgICAgcmV0dXJuICcK ICAgICAgICA8YSBocmVmPSIiIGNsYXNzPSJJY29CdXR0b24iIGlkPSInLiRpZC4nIj4nLic8 aW1nIGNsYXNzPSJJY29CdXR0b24iIGlkPSInLiRpZC4nIiBzcmM9IicuJGltZy4nIiBhbHQ9 IicuJGN1c3RvbV8xLiciIGhlaWdodD0iNDAiIC8+Jy4nPC9hPgogICAgICAgICc7CiAgICB9 Cn0KCmZ1bmN0aW9uIF9hZndfSW1nX2J1dHRvbigkaWQ9MCwgJEltYWdlKSB7CiAgICBpZiAo JEltYWdlID09ICIiKSB7CiAgICAgICAgLy8gbm8gdmFsdWUgYWxyZWFkeSBhc3NpZ25lZAog ICAgICAgIHJldHVybiAnCiAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkltZ0J1dHRvbiIg aWQ9IicuJGlkLiciPicuJzxpbWcgY2xhc3M9IkltZ0J1dHRvbiIgaWQ9IicuJGlkLiciIHNy Yz0iL2ltYWdlcy9pY28tZXZlbnRzLWRlZmF1bHQucG5nIiBoZWlnaHQ9IjQwIiB3aWR0aD0i NDAiIC8+Jy4nPC9hPgogICAgICAgICc7CiAgICB9IGVsc2UgaWYgKHN0cnZhbCgkSW1hZ2Up IDw9IDApIHsKICAgICAgICAvLyB1cmwtYmFzZWQgSW1hZ2UKICAgICAgICByZXR1cm4gJwog ICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJJbWdCdXR0b24iIGlkPSInLiRpZC4nIj4nLiRJ bWFnZS4nPC9hPgogICAgICAgICc7CiAgICB9IGVsc2UgewogICAgICAgIC8vIEluZGV4LUJh c2VkIEltYWdlIFJlZmVyZW5jZQogICAgICAgICRleHQgPSBzYWZlX2ZpZWxkKCJleHQiLCJ0 eHBfaW1hZ2UiLCAiaWQ9JEltYWdlIik7CiAgICAgICAgJG5hbWUgPSBzYWZlX2ZpZWxkKCJu YW1lIiwidHhwX2ltYWdlIiwgImlkPSRJbWFnZSIpOwogICAgICAgICRpbWcgPSAiL2ltYWdl cy8iLiRJbWFnZS4kZXh0OwogICAgICAgIHJldHVybiAnCiAgICAgICAgPGEgaHJlZj0iIyIg Y2xhc3M9IkltZ0J1dHRvbiIgaWQ9IicuJGlkLiciPicuJzxpbWcgY2xhc3M9IkltZ0J1dHRv biIgaWQ9IicuJGlkLiciIHNyYz0iJy4kaW1nLiciIGhlaWdodD0iNDAiIHdpZHRoPSI0MCIg Lz4gJy4kbmFtZS4nPC9hPgogICAgICAgICc7CiAgICB9Cn0KCmZ1bmN0aW9uIF9hZndfRGVs X2J1dHRvbigkaWQ9MCkgewogICAgcmV0dXJuICcKICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJE ZWxCdXR0b24iIGlkPSInLiRpZC4nIj5YPC9hPgogICAgJzsKfQoKZnVuY3Rpb24gX2Fmd19U aXRsZV9idXR0b24oJGlkPTAsICR0aXRsZSkgewogICAgcmV0dXJuICcKICAgIDxhIGhyZWY9 IiMiIGNsYXNzPSJFZEJ0biIgaWQ9IicuJGlkLiciPicuJHRpdGxlLic8L2E+CiAgICAnOwp9 CgpmdW5jdGlvbiBfYWZ3X2N1c3RvbTJfYnV0dG9uKCRpZCwgJGN1c3RvbV8yLCAkdXJsX3Rp dGxlKSB7CiAgICByZXR1cm4gJzxhIGhyZWY9IiMiIGNsYXNzPSJFZEJ0biIgaWQ9IicuJGlk LiciPicuJGN1c3RvbV8yLic8L2E+JzsKICAgIC8vcmV0dXJuICRjdXN0b21fMi4iPGJyIC8+ PGJyIC8+PGRpdiBjbGFzcz0ndXJsX3RpdGxlJz4iIC4kdXJsX3RpdGxlIC4iPC9kaXYiKTsK fQoKCi8vCi8vCi8vIFVUSUxJVFkgRlVOQ1RJT05TCi8vCi8vCgpmdW5jdGlvbiBfYWZ3X2lj b25zKCkgewogICAgLy9pZCwgbmFtZSwgY2F0ZWdvcnksIGV4dAogICAgJHJvd3MgPSBzYWZl X3Jvd3MoICJpZCwgbmFtZSwgZXh0IiwgInR4cF9pbWFnZSIsICJjYXRlZ29yeT0naWNvbici ICk7CiAgICAvLyRjb2wgPSBzYWZlX2NvbHVtbiggIm5hbWUiLCAidHhwX2ltYWdlcyIsICJj YXRlZ29yeT0naWNvbiciICk7CiAgICAkcyA9ICcnOwogICAgZm9yZWFjaCAoJHJvd3MgYXMg JHJvdykgewogICAgICAgIGlmICgkcyAhPSAnJykgewogICAgICAgICAgICAkcyAuPSAnLCc7 CiAgICAgICAgfQogICAgICAgICRzIC49ICciJyAuICI8aW1nIHNyYz0nL2ltYWdlcy8iLiRy b3dbJ2lkJ10uJHJvd1snZXh0J10uIicgaGVpZ2h0PSc0MCcgLz4gIi4kcm93WyduYW1lJ10u IiAiLiRyb3dbJ2lkJ10gLiAnIic7CiAgICB9CiAgICByZXR1cm4gJHM7Cn0KCmZ1bmN0aW9u IF9hZndfaW1hZ2VzKCkgewogICAgLy9pZCwgbmFtZSwgY2F0ZWdvcnksIGV4dAogICAgJHJv d3MgPSBzYWZlX3Jvd3MoICJpZCwgbmFtZSwgZXh0IiwgInR4cF9pbWFnZSIsICJjYXRlZ29y eT0nZXZlbnQnIiApOwogICAgLy8kY29sID0gc2FmZV9jb2x1bW4oICJuYW1lIiwgInR4cF9p bWFnZXMiLCAiY2F0ZWdvcnk9J2ljb24nIiApOwogICAgJHMgPSAnJzsKICAgIGZvcmVhY2gg KCRyb3dzIGFzICRyb3cpIHsKICAgICAgICBpZiAoJHMgIT0gJycpIHsKICAgICAgICAgICAg JHMgLj0gJywnOwogICAgICAgIH0KICAgICAgICAkcyAuPSAnIicgLiAiPGltZyBzcmM9Jy9p bWFnZXMvIi4kcm93WydpZCddLid0Jy4kcm93WydleHQnXS4iJyBoZWlnaHQ9JzE1MCcgLz4g Ii4kcm93WyduYW1lJ10uIiAiLiRyb3dbJ2lkJ10gLiAnIic7CiAgICB9CiAgICByZXR1cm4g JHM7Cn0KCi8vCi8vCi8vIFNURVAgU1VCLUZVTkNUSU9OUwovLwovLwoKLy9fYWZ3X2V2ZW50 c191cGRhdGVfUG9zdGVkCgpmdW5jdGlvbiBfYWZ3X2V2ZW50c19QZGF0ZV91cGRhdGUoJGlk LCAkbmV3RGF0ZSkgewoKICAgICRyb3cgPSBzYWZlX3JvdyggInVuaXhfdGltZXN0YW1wKFBv c3RlZCkgYXMgc1Bvc3RlZCwgVGl0bGUiLCAidGV4dHBhdHRlcm4iLCAiSUQ9Ii4kaWQgKTsK ICAgICRteVBvc3RlZCA9IHNhZmVfc3RyZnRpbWUoJyVZLSVtLSVkICVYJywkcm93WydzUG9z dGVkJ10pOwogICAgJG15UF9hcnIgPSBzcGxpdCgiICIsJG15UG9zdGVkKTsKICAgICRteVBf YXJyWzBdID0gJG5ld0RhdGU7CgogICAgLy8kbXlQb3N0ZWROZXcgPSBqb2luKCRteVBfYXJy LCAiICIpOwogICAgJG15UG9zdGVkTmV3ID0gc3RydG90aW1lKCBqb2luKCRteVBfYXJyLCAi ICIpICktdHpfb2Zmc2V0KCk7CiAgICAkbXlQb3N0ZWROZXcgPSAiZnJvbV91bml4dGltZSgk bXlQb3N0ZWROZXcpIjsKCiAgICAvLyBuZXcgVGl0bGUvLy8vLy8vLwogICAgJG5ld0RhdGVB cnIgPSBzcGxpdCgiLSIsICRuZXdEYXRlKTsKICAgICRuZXdZZWFyID0gJG5ld0RhdGVBcnJb MF07CiAgICAkbmV3TW9udGggPSAkbmV3RGF0ZUFyclsxXTsKICAgICRuZXdEYXkgPSAkbmV3 RGF0ZUFyclsyXTsKICAgICRuZXdXZWVrRGF5ID0gc2FmZV9zdHJmdGltZSgnJUEnLHN0cnRv dGltZSgkbmV3RGF0ZS4iIDEyOjAwOjAwIikgKTsKCiAgICAkdGl0bGVhcnIgPSBzcGxpdCgi ICIsICRyb3dbJ1RpdGxlJ10pOwogICAgYXJyYXlfc2hpZnQoJHRpdGxlYXJyKTsKICAgIGFy cmF5X3NoaWZ0KCR0aXRsZWFycik7CiAgICAvLyRuZXdfVGl0bGUgPSAgJG5ld01vbnRoLicv Jy4kbmV3RGF5LicvJy4kbmV3WWVhci4nICcuJG5ld1dlZWtEYXkuJzogJy5qb2luKCIgIiwg JHRpdGxlYXJyKTsKICAgICRuZXdfVGl0bGUgPSAkcm93WydUaXRsZSddOwoKICAgIC8vIG5l dyB1cmwgVGl0bGUKICAgICR0aXRsZWFyciA9IHNwbGl0KCIgIiwgJHJvd1snVGl0bGUnXSk7 CiAgICBhcnJheV9zaGlmdCgkdGl0bGVhcnIpOwogICAgYXJyYXlfc2hpZnQoJHRpdGxlYXJy KTsKICAgIC8vJG5ld191cmxfdGl0bGUgPSBzdHJpcFNwYWNlKCAkbmV3TW9udGguJG5ld0Rh eS4kbmV3WWVhci4iICIuJG5ld1dlZWtEYXkuIiAiLmpvaW4oIiAiLCAkdGl0bGVhcnIpLDEg KTsKICAgICRuZXdfdXJsX3RpdGxlID0gc3RyaXBTcGFjZSggJG5ld01vbnRoLicuJy4kbmV3 RGF5LicuJy4kbmV3WWVhci4iICIuJG5ld1dlZWtEYXkuIiAiLiRyb3dbJ1RpdGxlJ10sMSAp OwogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgogICAgLy8kc3VjY2VzcyA9IHNhZmVfdXBk YXRlKCJ0ZXh0cGF0dGVybiIsIlBvc3RlZD0kbXlQb3N0ZWROZXciLCJJRD0kaWQiKTsKICAg ICRuZXdfVGl0bGUgPSBteXNxbF9lc2NhcGVfc3RyaW5nKCRuZXdfVGl0bGUpOwogICAgJHN1 Y2Nlc3MgPSBzYWZlX3VwZGF0ZSgidGV4dHBhdHRlcm4iLCJQb3N0ZWQ9Ii5kb1NsYXNoKCRt eVBvc3RlZE5ldykuIiwgdXJsX3RpdGxlPSciLmRvU2xhc2goJG5ld191cmxfdGl0bGUpLiIn IiwiSUQ9Ii5kb1NsYXNoKCRpZCkuIiIpOwogICAgLy8kc3VjY2VzcyA9ICJQb3N0ZWQ9JG15 UG9zdGVkTmV3LCBUaXRsZT0nJG5ld19UaXRsZScsIHVybF90aXRsZT0nJG5ld191cmxfdGl0 bGUnIjsKCiAgICBpZiAoJHN1Y2Nlc3MpIHsKICAgICAgICAkbXNnID0gIjxzdHJvbmc+RXZl bnQgKCRpZCkgVXBkYXRlZCBTdWNjZXNzZnVsbHkhICgkc3VjY2Vzcyk8L3N0cm9uZz4iOwog ICAgfSBlbHNlIHsKICAgICAgICAkbXNnID0gIjxzdHJvbmc+VW5hYmxlIHRvIFVwZGF0ZSBF dmVudCE8L3N0cm9uZz48YnIgLz4iLiRzdWNjZXNzOwogICAgfQogICAgcmV0dXJuICRtc2c7 Cn0KCmZ1bmN0aW9uIF9hZndfZXZlbnRzX0RlbCgkaWQpIHsKICAgICRzdWNjZXNzID0gc2Fm ZV9kZWxldGUoInRleHRwYXR0ZXJuIiwiSUQ9JGlkIik7CgogICAgaWYgKCRzdWNjZXNzKSB7 CiAgICAgICAgJG1zZyA9ICI8c3Ryb25nPkV2ZW50ICgkaWQpIERlbGV0ZWQgU3VjY2Vzc2Z1 bGx5ISAoJHN1Y2Nlc3MpPC9zdHJvbmc+IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJG1zZyA9 ICI8c3Ryb25nPlVuYWJsZSB0byBEZWxldGUgRXZlbnQhPC9zdHJvbmc+PGJyIC8+Ii4kc3Vj Y2VzczsKICAgIH0KICAgIHJldHVybiAkbXNnOwp9CgpmdW5jdGlvbiBfYWZ3X2V2ZW50c19j b3B5KCRpZCwgJG5ld0RhdGUpIHsKICAgICRyb3cgPSBzYWZlX3JvdyggIioiLCAidGV4dHBh dHRlcm4iLCAiSUQ9Ii4kaWQgKTsKICAgICRUaXRsZV9wbGFpbiA9ICRyb3dbJ1RpdGxlJ107 CiAgICBleHRyYWN0KGRvU2xhc2goJHJvdykpOwoKICAgIC8vIFBhcnNlIERhdGUKICAgICRu ZXdEYXRlQXJyID0gc3BsaXQoIi0iLCAkbmV3RGF0ZSk7CiAgICAkbmV3WWVhciA9ICRuZXdE YXRlQXJyWzBdOwogICAgJG5ld01vbnRoID0gJG5ld0RhdGVBcnJbMV07CiAgICAkbmV3RGF5 ID0gJG5ld0RhdGVBcnJbMl07CiAgICAvLyRuZXdfdXJsX3RpdGxlID0gc3RyaXBTcGFjZSgg JG5ld01vbnRoLicuJy4kbmV3RGF5LicuJy4kbmV3WWVhci4iICIuJG5ld1dlZWtEYXkuIiAi LiRUaXRsZSwxICk7CgogICAgLy8gbmV3IFBvc3RlZAogICAgJHBvc3RhcnIgPSBzcGxpdCgi ICIsICRQb3N0ZWQpOwogICAgJHRpbWUgPSAkcG9zdGFyclsxXTsKICAgICRuZXdfUG9zdGVk ID0gbXlzcWxfZXNjYXBlX3N0cmluZygkbmV3RGF0ZS4iICIuJHRpbWUpOwoKICAgICRuZXdX ZWVrRGF5ID0gc2FmZV9zdHJmdGltZSgnJUEnLHN0cnRvdGltZSgkbmV3RGF0ZS4iICIuJHRp bWUpICk7CgogICAgJG5ld191cmxfdGl0bGUgPSBzdHJpcFNwYWNlKCAkbmV3TW9udGguJy4n LiRuZXdEYXkuJy4nLiRuZXdZZWFyLiIgIi4kbmV3V2Vla0RheS4iICIuJFRpdGxlLDEgKTsK CiAgICAkc3VjY2VzcyA9IHNhZmVfaW5zZXJ0KAogICAgICAgInRleHRwYXR0ZXJuIiwKICAg ICAgICJUaXRsZSAgICAgICAgICAgPSAnJFRpdGxlJywKICAgICAgICBCb2R5ICAgICAgICAg ICAgPSAnJEJvZHknLAogICAgICAgIEJvZHlfaHRtbCAgICAgICA9ICckQm9keV9odG1sJywK ICAgICAgICBFeGNlcnB0ICAgICAgICAgPSAnJEV4Y2VycHQnLAogICAgICAgIEV4Y2VycHRf aHRtbCAgICA9ICckRXhjZXJwdF9odG1sJywKICAgICAgICBJbWFnZSAgICAgICAgICAgPSAn JEltYWdlJywKICAgICAgICBLZXl3b3JkcyAgICAgICAgPSAnJEtleXdvcmRzJywKICAgICAg ICBTdGF0dXMgICAgICAgICAgPSAgJFN0YXR1cywKICAgICAgICBQb3N0ZWQgICAgICAgICAg PSAgJyRuZXdfUG9zdGVkJywKICAgICAgICBMYXN0TW9kICAgICAgICAgPSAgbm93KCksCiAg ICAgICAgQXV0aG9ySUQgICAgICAgID0gJyRBdXRob3JJRCcsCiAgICAgICAgU2VjdGlvbiAg ICAgICAgID0gJyRTZWN0aW9uJywKICAgICAgICBDYXRlZ29yeTEgICAgICAgPSAnJENhdGVn b3J5MScsCiAgICAgICAgQ2F0ZWdvcnkyICAgICAgID0gJyRDYXRlZ29yeTInLAogICAgICAg IHRleHRpbGVfYm9keSAgICA9ICAkdGV4dGlsZV9ib2R5LAogICAgICAgIHRleHRpbGVfZXhj ZXJwdCA9ICAkdGV4dGlsZV9leGNlcnB0LAogICAgICAgIEFubm90YXRlICAgICAgICA9ICAk QW5ub3RhdGUsCiAgICAgICAgb3ZlcnJpZGVfZm9ybSAgID0gJyRvdmVycmlkZV9mb3JtJywK ICAgICAgICB1cmxfdGl0bGUgICAgICAgPSAnJG5ld191cmxfdGl0bGUnLAogICAgICAgIEFu bm90YXRlSW52aXRlICA9ICckQW5ub3RhdGVJbnZpdGUnLAogICAgICAgIGN1c3RvbV8xICAg ICAgICA9ICckY3VzdG9tXzEnLAogICAgICAgIGN1c3RvbV8yICAgICAgICA9ICckY3VzdG9t XzInLAogICAgICAgIGN1c3RvbV8zICAgICAgICA9ICckY3VzdG9tXzMnLAogICAgICAgIGN1 c3RvbV80ICAgICAgICA9ICckY3VzdG9tXzQnLAogICAgICAgIGN1c3RvbV81ICAgICAgICA9 ICckY3VzdG9tXzUnLAogICAgICAgIGN1c3RvbV82ICAgICAgICA9ICckY3VzdG9tXzYnLAog ICAgICAgIGN1c3RvbV83ICAgICAgICA9ICckY3VzdG9tXzcnLAogICAgICAgIGN1c3RvbV84 ICAgICAgICA9ICckY3VzdG9tXzgnLAogICAgICAgIGN1c3RvbV85ICAgICAgICA9ICckY3Vz dG9tXzknLAogICAgICAgIGN1c3RvbV8xMCAgICAgICA9ICckY3VzdG9tXzEwJywKICAgICAg ICB1aWQgICAgICAgICAgICAgPSAnIi5tZDUodW5pcWlkKHJhbmQoKSx0cnVlKSkuIicsCiAg ICAgICAgZmVlZF90aW1lICAgICAgID0gbm93KCkiCiAgICApOwoKICAgIGlmICgkc3VjY2Vz cykgewogICAgICAgICRtc2cgPSAiPHN0cm9uZz5FdmVudCBBZGRlZCBTdWNjZXNzZnVsbHkh ICgiLiRzdWNjZXNzLiIpPC9zdHJvbmc+IjsKICAgICAgICAkbmV3RXZlbnRJZCA9ICRzdWNj ZXNzOwogICAgfSBlbHNlIHsKICAgICAgICAkbXNnID0gIjxzdHJvbmc+VW5hYmxlIHRvIEFk ZCBFdmVudCE8L3N0cm9uZz48YnIgLz4iLiRzdWNjZXNzOwogICAgfQogICAgcmV0dXJuICRt c2c7Cn0KCmZ1bmN0aW9uIF9hZndfbGlzdF9ldmVudHNfcm93KCRyb3cpIHsKICAgIGdsb2Jh bCAkYWZ3X2V2ZW50c19zZWN0aW9uOwogICAgJGNvbHMgPSBhcnJheSgnSUQnLCdQb3N0ZWQn LCdUaXRsZScsJ0ltYWdlJywnY3VzdG9tXzInKTsKICAgICRjYnV0ID0gX2Fmd19Db3B5Vmll d19idXR0b24oJHJvd1snSUQnXSwnLycuJGFmd19ldmVudHNfc2VjdGlvbi4nLycuJHJvd1sn dXJsX3RpdGxlJ10pOwogICAgJHMgPSB0ZCgkY2J1dCk7CiAgICAkY3VzdG9tXzEgPSAkcm93 WydjdXN0b21fMSddOwogICAgJHMgLj0gdGQoX2Fmd19JY29fYnV0dG9uKCRyb3dbJ0lEJ10s JGN1c3RvbV8xKSk7CiAgICAkcm93WydQb3N0ZWQnXSA9IF9hZndfUG9zdGVkX2J1dHRvbigg JHJvd1snSUQnXSwgc2FmZV9zdHJmdGltZSgnJVktJW0tJWQgJVgnLCRyb3dbJ3NQb3N0ZWQn XSkgKTsKICAgIGZvcmVhY2goJGNvbHMgYXMgJGNvbCkgewogICAgICAgIGlmICgkY29sID09 ICJJRCIpIHsKICAgICAgICAgICAgLy8kcyAuPSB0ZCgnPGEgaHJlZj0iP2V2ZW50PWFydGlj bGUmc3RlcD1lZGl0JklEPScuJHJvd1snSUQnXS4nIj4nLiRyb3dbJ0lEJ10uJzwvYT4nKTsK ICAgICAgICAgICAgJHMgLj0gdGQoJHJvd1snSUQnXSk7CiAgICAgICAgfSBlbHNlIGlmICgk Y29sID09ICdUaXRsZScpIHsKICAgICAgICAgICAgJHMgLj0gdGQoX2Fmd19UaXRsZV9idXR0 b24oJHJvd1snSUQnXSwkcm93WydUaXRsZSddKSAuIjxiciAvPjxkaXYgY2xhc3M9J2V4Y2Vy cHQnPiIgLiRyb3dbJ2V4Y2VycHQnXSAuIjwvZGl2Iik7CiAgICAgICAgfSBlbHNlIGlmICgk Y29sID09ICdJbWFnZScpIHsKICAgICAgICAgICAgJHMgLj0gdGQoX2Fmd19JbWdfYnV0dG9u KCRyb3dbJ0lEJ10sJHJvd1snSW1hZ2UnXSkpOwogICAgICAgIH0gZWxzZSBpZiAoJGNvbCA9 PSAnY3VzdG9tXzInKSB7CiAgICAgICAgICAgICRzIC49IHRkKF9hZndfY3VzdG9tMl9idXR0 b24oJHJvd1snSUQnXSwkcm93WydjdXN0b21fMiddLCRyb3dbJ3VybF90aXRsZSddKSk7CiAg ICAgICAgICAgIC8vJHMgLj0gdGQoJHJvd1skY29sXS4iPGJyIC8+PGJyIC8+PGRpdiBjbGFz cz0ndXJsX3RpdGxlJz4iIC4kcm93Wyd1cmxfdGl0bGUnXSAuIjwvZGl2Iik7CiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgJHMgLj0gdGQoJHJvd1skY29sXSk7CiAgICAgICAgfQog ICAgfQogICAgJHMgLj0gdGQoX2Fmd19EZWxfYnV0dG9uKCRyb3dbJ0lEJ10pKTsKCiAgICBy ZXR1cm4gJHM7Cn0KCmZ1bmN0aW9uIF9hZndfbGlzdF9ldmVudHMoJG1lc3NhZ2U9JycpIHsK ICAgIHBhZ2V0b3AoIkFGVyBFdmVudHMiLCRtZXNzYWdlKTsKICAgIGdsb2JhbCAkbmV3RXZl bnRJZDsKICAgIGdsb2JhbCAkYWZ3X2V2ZW50c19zZWN0aW9uOwogICAgJGlkID0gZ3BzKCdp ZCcpOwoKCS8vIExPR0dFUgoJLyplY2hvIHN0YXJ0VGFibGUoJ215bG9nJyk7CgllY2hvIHRy KHRkKCc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBteUxvZ1JlYWRlciA9 IG5ldyBZQUhPTy53aWRnZXQuTG9nUmVhZGVyKCk7Cm15TG9nUmVhZGVyLmNvbGxhcHNlKCk7 Cjwvc2NyaXB0PicpKTsKCWVjaG8gZW5kVGFibGUoKTsqLwoKCWVjaG8gc3RhcnRUYWJsZSgn bGlzdCcpOwogICAgLy8iSUQsUG9zdGVkLFRpdGxlLEJvZHksRXhjZXJwdCxJbWFnZSxDYXRl Z29yeTEsY3VzdG9tXzEsY3VzdG9tXzIiCiAgICAkY29sbmFtZXMgPSBhcnJheSgnSUQnLCdQ b3N0ZWQnLCdUaXRsZScsJ0ltYWdlJywnY3VzdG9tXzEnLCdjdXN0b21fMicsJ3VybF90aXRs ZScsJ2V4Y2VycHQnKTsKICAgICRjb2xzID0gYXJyYXkoJ0lEJywnUG9zdGVkJywnVGl0bGUn LCdJbWFnZScsJ2N1c3RvbV8yJyk7CiAgICAkY29sc19oZWFkID0gYXJyYXkoJ0lEJywnRGF0 ZSAvIFRpbWUnLCdUaXRsZSAvIEV4Y2VycHQnLCdJbWFnZScsJ0dlbnJlJyk7CiAgICAvLyRj b2xuYW1lcyA9IGFycmF5KCdJRCcsJ1Bvc3RlZCcsJ1RpdGxlJywnQm9keScsJ0V4Y2VycHQn LCdJbWFnZScsJ0NhdGVnb3J5MScsJ2N1c3RvbV8xJywnY3VzdG9tXzInKTsKICAgICRyb3dz ID0gc2FmZV9yb3dzKCAndW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyBzUG9zdGVkLCcuam9p bigiLCIsJGNvbG5hbWVzKSwgInRleHRwYXR0ZXJuIiwgInNlY3Rpb249JyRhZndfZXZlbnRz X3NlY3Rpb24nIG9yZGVyIGJ5IFBvc3RlZCBkZXNjIik7CgoJLy8gaGVhZGVyCiAgICAkcyAg PSB0ZCgiJm5ic3A7Iik7CiAgICAkcyAuPSB0ZCgiSWNvbiIpOwogICAgZm9yZWFjaCgkY29s c19oZWFkIGFzICRuKSB7CiAgICAgICAgJHMgLj0gdGQoJG4pOwogICAgfQogICAgJHMgLj0g dGQoIiZuYnNwOyIpOwogICAgZWNobyB0cigkcyk7CgoJLy8gcm93cwogICAgZm9yZWFjaCgk cm93cyBhcyAkcm93KSB7CiAgICAgICAgJHMgPSBfYWZ3X2xpc3RfZXZlbnRzX3Jvdygkcm93 KTsKCiAgICAgICAgJHRyYXR0cyA9ICIiOwogICAgICAgICR0cmF0dHMgPSAoJGlkID09ICRy b3dbJ0lEJ10pID8gJyBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2VlZTsiJyA6ICR0cmF0 dHM7CiAgICAgICAgJHRyYXR0cyA9ICgkbmV3RXZlbnRJZCA9PSAkcm93WydJRCddKSA/ICcg c3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmE7IicgOiAkdHJhdHRzOwogICAgICAgICR0 cmF0dHMgLj0gJyBpZD0icm93Jy4kcm93WydJRCddLiciJzsKCiAgICAgICAgZWNobyB0cigk cywgJHRyYXR0cyk7CiAgICB9CgogICAgZWNobyBlbmRUYWJsZSgpOwoKCiAgICBlY2hvIF9h ZndfbGlzdF9qcygkcm93cyk7CgoKCWVjaG8gJzxkaXYgaWQ9ImVkaXRDb250Ij4gPC9kaXY+ JzsKfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCi8vLy8vLy8vLy8vLy8gSlNPTiAvLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1bmN0aW9u IF9hZndfZXZlbnRzX2pzb25fcmVwbGFjZSgkYnVmZmVyKSB7CiAgICBnbG9iYWwgJGV2ZW50 OwogICAgJGEgPSBzcGxpdCgnPGpzb24+JywkYnVmZmVyKTsKICAgICRiID0gc3BsaXQoJzwv anNvbj4nLCAkYVsxXSk7CiAgICByZXR1cm4gJGJbMF07Cn0KCmZ1bmN0aW9uIF9hZndfZXZl bnRzX2pzb24oKSB7CiAgICAkZiA9IGdwcygnZicpOwoKICAgIGlmICgkZiA9PSAnZWRpdEZv cm0nKSB7CiAgICAgICAgX2V2ZW50c19lZGl0X2Zvcm0oKTsKICAgIH0gZWxzZWlmICgkZiA9 PSAnZWRpdEZvcm1TYXZlJykgewogICAgICAgIF9ldmVudHNfZWRpdF9mb3JtX3NhdmUoKTsK ICAgIH0gZWxzZWlmICgkZiA9PSAnZ2V0Qm9keScpIHsKICAgICAgICBfZXZlbnRzX2dldF9i b2R5KCk7CiAgICB9IGVsc2VpZiAoJGYgPT0gJ2ltZ1VwZGF0ZScpIHsKICAgICAgICBfYWZ3 X2V2ZW50c19JbWdfdXBkYXRlKCk7CiAgICB9IGVsc2VpZiAoJGYgPT0gJ2ljb1VwZGF0ZScp IHsKICAgICAgICBfYWZ3X2V2ZW50c19JY29fdXBkYXRlKCk7CiAgICB9IGVsc2VpZiAoJGYg PT0gJ1B0aW1lVXBkYXRlJykgewogICAgICAgIF9hZndfZXZlbnRzX1B0aW1lX3VwZGF0ZSgp OwogICAgfQp9CgpmdW5jdGlvbiBfYWZ3X2V2ZW50c19QdGltZV91cGRhdGUoKSB7CiAgICAk aWQgPSBkb1NsYXNoKGdwcygnaWQnKSk7CiAgICAkbmV3VGltZSA9IGdwcygnbmV3VGltZScp OwogICAgJHJvdyA9IHNhZmVfcm93KCAidW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyBzUG9z dGVkIiwgInRleHRwYXR0ZXJuIiwgIklEPSIuJGlkICk7CiAgICAkbXlQb3N0ZWQgPSBzYWZl X3N0cmZ0aW1lKCclWS0lbS0lZCAlWCcsJHJvd1snc1Bvc3RlZCddKTsKICAgICRteVBfYXJy ID0gc3BsaXQoIiAiLCRteVBvc3RlZCk7CiAgICAkbXlQX2FyclsxXSA9ICRuZXdUaW1lOwoK ICAgIC8vJG15UG9zdGVkTmV3ID0gam9pbigkbXlQX2FyciwgIiAiKTsKICAgICRteVBvc3Rl ZE5ldyA9IGRvU2xhc2goc3RydG90aW1lKCBqb2luKCRteVBfYXJyLCAiICIpICktdHpfb2Zm c2V0KCkpOwogICAgJG15UG9zdGVkTmV3ID0gImZyb21fdW5peHRpbWUoJG15UG9zdGVkTmV3 KSI7CgogICAgJHN1Y2Nlc3MgPSBzYWZlX3VwZGF0ZSgidGV4dHBhdHRlcm4iLCJQb3N0ZWQ9 JG15UG9zdGVkTmV3IiwiSUQ9JGlkIik7CgogICAgaWYgKCRzdWNjZXNzKSB7CiAgICAgICAg JG1zZyA9ICI8c3Ryb25nPkV2ZW50ICgkaWQpIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5ISAoJHN1 Y2Nlc3MpPC9zdHJvbmc+IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJG1zZyA9ICI8c3Ryb25n PlVuYWJsZSB0byBVcGRhdGUgRXZlbnQhPC9zdHJvbmc+PGJyIC8+Ii4kc3VjY2VzczsKICAg IH0KICAgIF9ldmVudHNfanNvbl9yb3coJGlkKTsKfQoKZnVuY3Rpb24gX2Fmd19ldmVudHNf SWNvX3VwZGF0ZSgpIHsKICAgICRpZCA9IGRvU2xhc2goZ3BzKCdpZCcpKTsKICAgICRuZXdJ Y28gPSBkb1NsYXNoKGdwcygnbmV3SWNvJykpOwogICAgJG5ld0ljb0lkID0gYXJyYXlfcG9w KHNwbGl0KCIgIiwgJG5ld0ljbykpOwogICAgJGV4dCA9IHNhZmVfZmllbGQoImV4dCIsInR4 cF9pbWFnZSIsICJpZD0kbmV3SWNvSWQiKTsKICAgICRuZXdJY28gPSBkb1NsYXNoKCIvaW1h Z2VzLyIuJG5ld0ljb0lkLiRleHQpOwogICAgJHN1Y2Nlc3MgPSBzYWZlX3VwZGF0ZSgidGV4 dHBhdHRlcm4iLCJjdXN0b21fMT0nJG5ld0ljbyciLCJJRD0kaWQiKTsKCiAgICBpZiAoJHN1 Y2Nlc3MpIHsKICAgICAgICAkbXNnID0gIjxzdHJvbmc+RXZlbnQgKCRpZCkgVXBkYXRlZCBT dWNjZXNzZnVsbHkhICgkc3VjY2Vzcyk8L3N0cm9uZz4iOwogICAgfSBlbHNlIHsKICAgICAg ICAkbXNnID0gIjxzdHJvbmc+VW5hYmxlIHRvIFVwZGF0ZSBFdmVudCE8L3N0cm9uZz48YnIg Lz4iLiRzdWNjZXNzOwogICAgfQogICAgX2V2ZW50c19qc29uX3JvdygkaWQpOwp9CmZ1bmN0 aW9uIF9hZndfZXZlbnRzX0ltZ191cGRhdGUoKSB7CiAgICAkaWQgPSBkb1NsYXNoKGdwcygn aWQnKSk7CiAgICAkbmV3SW1nID0gZ3BzKCduZXdJbWcnKTsKICAgICRuZXdJbWdJZCA9IGRv U2xhc2goYXJyYXlfcG9wKHNwbGl0KCIgIiwgJG5ld0ltZykpKTsKICAgIC8vJGV4dCA9IHNh ZmVfZmllbGQoImV4dCIsInR4cF9pbWFnZSIsICJpZD0kbmV3SW1nSWQiKTsKICAgIC8vJG5l d0ltZyA9ICIvaW1hZ2VzLyIuJG5ld0ltZ0lkLiRleHQ7CiAgICAkc3VjY2VzcyA9IHNhZmVf dXBkYXRlKCJ0ZXh0cGF0dGVybiIsIkltYWdlPSckbmV3SW1nSWQnIiwiSUQ9JGlkIik7Cgog ICAgaWYgKCRzdWNjZXNzKSB7CiAgICAgICAgJG1zZyA9ICI8c3Ryb25nPkV2ZW50ICgkaWQp IFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5ISAoJHN1Y2Nlc3MpPC9zdHJvbmc+IjsKICAgIH0gZWxz ZSB7CiAgICAgICAgJG1zZyA9ICI8c3Ryb25nPlVuYWJsZSB0byBVcGRhdGUgRXZlbnQhPC9z dHJvbmc+PGJyIC8+Ii4kc3VjY2VzcyA7CiAgICB9CiAgICBfZXZlbnRzX2pzb25fcm93KCRp ZCk7Cn0KCmZ1bmN0aW9uIF9ldmVudHNfZ2V0X2JvZHkoKSB7CiAgICAkaWQgPSBkb1NsYXNo KGdwcygnaWQnKSk7CgogICAgJHJvdyA9IHNhZmVfcm93KCAiQm9keV9odG1sIiwgInRleHRw YXR0ZXJuIiwgIklEID0gIi4kaWQgKTsKCiAgICBlY2hvICc8anNvbj4nLiRyb3dbJ0JvZHlf aHRtbCddLic8L2pzb24+JzsKfQoKZnVuY3Rpb24gX2V2ZW50c19lZGl0X2Zvcm0oKSB7CiAg ICAkaWQgPSBkb1NsYXNoKGdwcygnaWQnKSk7CgogICAgJHJvdyA9IHNhZmVfcm93KCAiVGl0 bGUsIEV4Y2VycHQsIEJvZHksIGN1c3RvbV8yIiwgInRleHRwYXR0ZXJuIiwgIklEID0gIi4k aWQgKTsKICAgICRyZXQgPSAkcm93LiAifCI7CgogICAgZWNobyAnPGpzb24+Cgk8ZGl2IGNs YXNzPSJoZCI+RWRpdCB0aGlzIEV2ZW50PC9kaXY+Cgk8ZGl2IGNsYXNzPSJiZCI+Cgk8Zm9y bSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iaW5kZXgucGhwP2V2ZW50PWFmd19ldmVudHMmc3Rl cD1qc29uJmY9ZWRpdEZvcm1TYXZlJmlkPScuJGlkLiciPgoJCTxsYWJlbCBmb3I9IlRpdGxl Ij5UaXRsZTo8L2xhYmVsPjxpbnB1dCBzaXplPSIxMDAiIHR5cGU9InRleHRib3giIG5hbWU9 IlRpdGxlIiB2YWx1ZT0iJy4kcm93WydUaXRsZSddLiciIC8+CiAgICAgICAgPGRpdiBjbGFz cz0iY2xlYXIiPjwvZGl2PgoJCTxsYWJlbCBmb3I9IkV4Y2VycHQiPkV4Y2VycHQ6PC9sYWJl bD48dGV4dGFyZWEgY29scz0iMTAwIiByb3dzPSIyIiBuYW1lPSJFeGNlcnB0Ij4nLiRyb3db J0V4Y2VycHQnXS4nPC90ZXh0YXJlYT4KICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PC9k aXY+CgkJPGxhYmVsIGZvcj0iQm9keSI+Qm9keTo8L2xhYmVsPjx0ZXh0YXJlYSBjb2xzPSIx MDAiIHJvd3M9IjIwIiBuYW1lPSJCb2R5Ij4nLiRyb3dbJ0JvZHknXS4nPC90ZXh0YXJlYT4K ICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+CgkJPGxhYmVsIGZvcj0iY3VzdG9t XzIiPkdlbnJlIChjdXN0b21fMik6PC9sYWJlbD48aW5wdXQgc2l6ZT0iMTAwIiB0eXBlPSJ0 ZXh0Ym94IiBuYW1lPSJjdXN0b21fMiIgdmFsdWU9IicuJHJvd1snY3VzdG9tXzInXS4nIiAv PgoJCTxkaXYgY2xhc3M9ImNsZWFyIj48L2Rpdj4KCTwvZm9ybT4KCTwvZGl2PgogICAgPC9q c29uPic7Cn0KCmZ1bmN0aW9uIF9ldmVudHNfZWRpdF9mb3JtX3NhdmUoKSB7CiAgICBnbG9i YWwgJHR4cF91c2VyLCAkcHJlZnM7CgogICAgZXh0cmFjdCgkcHJlZnMpOwoKICAgICRpbmNv bWluZyA9IGdwc2EoYXJyYXkoJ2lkJywnVGl0bGUnLCdCb2R5JywnRXhjZXJwdCcsJ2N1c3Rv bV8yJykpOwoKICAgICRvbGRBcnRpY2xlID0gc2FmZV9yb3coJ1Bvc3RlZCx0ZXh0aWxlX2Jv ZHksIHRleHRpbGVfZXhjZXJwdCwgdXJsX3RpdGxlLCBUaXRsZScsJ3RleHRwYXR0ZXJuJywn SUQgPSAnLmRvU2xhc2goKGludCkkaW5jb21pbmdbJ2lkJ10pKTsKCiAgICAkaW5jb21pbmdb J3RleHRpbGVfYm9keSddICA9ICRvbGRBcnRpY2xlWyd0ZXh0aWxlX2JvZHknXTsKICAgICRp bmNvbWluZ1sndGV4dGlsZV9leGNlcnB0J10gPSAkb2xkQXJ0aWNsZVsndGV4dGlsZV9leGNl cnB0J107CgogICAgJGluY29taW5nID0gbXlfdGV4dGlsZV9tYWluX2ZpZWxkcygkaW5jb21p bmcsICR1c2VfdGV4dGlsZSk7CgogICAgZXh0cmFjdChkb1NsYXNoKCRpbmNvbWluZykpOwog ICAgZXh0cmFjdChhcnJheV9tYXAoJ2Fzc2VydF9pbnQnLCBncHNhKGFycmF5KCdpZCcsICd0 ZXh0aWxlX2JvZHknLCAndGV4dGlsZV9leGNlcnB0JykpKSk7CgogICAgJFBvc3RlZEFyciA9 IHNwbGl0KCIgIiwgJG9sZEFydGljbGVbJ1Bvc3RlZCddKTsKICAgICREYXRlQXJyID0gc3Bs aXQoIi0iLCAkUG9zdGVkQXJyWzBdKTsKICAgICR3WWVhciA9ICREYXRlQXJyWzBdOwogICAg JHdNb250aCA9ICREYXRlQXJyWzFdOwogICAgJHdEYXkgPSAkRGF0ZUFyclsyXTsKICAgICR1 cmxfdGl0bGUgPSBzdHJpcFNwYWNlKCAkd01vbnRoLicuJy4kd0RheS4nLicuJHdZZWFyLiIg Ii4kVGl0bGVfcGxhaW4sMSApOwoKICAgICRyZXN1bHQgPSBzYWZlX3VwZGF0ZSgidGV4dHBh dHRlcm4iLAoJCSAgICJUaXRsZSAgICAgICAgICAgPSAnJFRpdGxlJywKCQkJQm9keSAgICAg ICAgICAgID0gJyRCb2R5JywKCQkJQm9keV9odG1sICAgICAgID0gJyRCb2R5X2h0bWwnLAoJ CQlFeGNlcnB0ICAgICAgICAgPSAnJEV4Y2VycHQnLAoJCQlFeGNlcnB0X2h0bWwgICAgPSAn JEV4Y2VycHRfaHRtbCcsCgkJCUxhc3RNb2QgICAgICAgICA9ICBub3coKSwKCQkJTGFzdE1v ZElEICAgICAgID0gJyR0eHBfdXNlcicsCiAgICAgICAgICAgIHVybF90aXRsZSAgICAgICA9 ICckdXJsX3RpdGxlJywKCQkJY3VzdG9tXzIgICAgICAgID0gJyRjdXN0b21fMiciLAoJCQki SUQgPSAkaWQiCgkJKTsKCiAgICBfZXZlbnRzX2pzb25fcm93KCRpZCk7Cn0KCmZ1bmN0aW9u IF9ldmVudHNfanNvbl9yb3coJGlkKSB7CiAgICAkY29sbmFtZXMgPSBhcnJheSgnSUQnLCdQ b3N0ZWQnLCdUaXRsZScsJ0ltYWdlJywnY3VzdG9tXzEnLCdjdXN0b21fMicsJ3VybF90aXRs ZScsJ2V4Y2VycHQnKTsKICAgICRyb3cgPSBzYWZlX3JvdyggJ3VuaXhfdGltZXN0YW1wKFBv c3RlZCkgYXMgc1Bvc3RlZCwnLmpvaW4oIiwiLGRvU2xhc2goJGNvbG5hbWVzKSksICJ0ZXh0 cGF0dGVybiIsICJJRD0iLmRvU2xhc2goJGlkKSk7CiAgICBlY2hvICc8anNvbj4nIC4gX2Fm d19saXN0X2V2ZW50c19yb3coJHJvdykgLiAnPC9qc29uPic7Cn0KCi8vIGNvcGllZCBmcm9t IHR4cF9hcnRpY2xlLnBocCAoNC4wLjUpCi8vIGlzIHRoaXMgcmVkdW5kYW50PwpmdW5jdGlv biBteV90ZXh0aWxlX21haW5fZmllbGRzKCRpbmNvbWluZywgJHVzZV90ZXh0aWxlKQp7CiAg ICBnbG9iYWwgJHR4cGNmZzsKCiAgICBpbmNsdWRlX29uY2UgdHhwYXRoLicvbGliL2NsYXNz VGV4dGlsZS5waHAnOwogICAgJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOwoKICAgICRpbmNv bWluZ1snVGl0bGVfcGxhaW4nXSA9ICRpbmNvbWluZ1snVGl0bGUnXTsKCiAgICBpZiAoJGlu Y29taW5nWyd0ZXh0aWxlX2JvZHknXSA9PSBMRUFWRV9URVhUX1VOVE9VQ0hFRCkgewoKICAg ICAgICAkaW5jb21pbmdbJ0JvZHlfaHRtbCddID0gdHJpbSgkaW5jb21pbmdbJ0JvZHknXSk7 CgogICAgfWVsc2VpZiAoJGluY29taW5nWyd0ZXh0aWxlX2JvZHknXSA9PSBVU0VfVEVYVElM RSl7CgogICAgICAgICRpbmNvbWluZ1snQm9keV9odG1sJ10gPSAkdGV4dGlsZS0+VGV4dGls ZVRoaXMoJGluY29taW5nWydCb2R5J10pOwogICAgICAgICRpbmNvbWluZ1snVGl0bGUnXSA9 ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaW5jb21pbmdbJ1RpdGxlJ10sJycsMSk7CgogICAg fWVsc2VpZiAoJGluY29taW5nWyd0ZXh0aWxlX2JvZHknXSA9PSBDT05WRVJUX0xJTkVCUkVB S1MpewoKICAgICAgICAkaW5jb21pbmdbJ0JvZHlfaHRtbCddID0gbmwyYnIodHJpbSgkaW5j b21pbmdbJ0JvZHknXSkpOwogICAgfQoKICAgIGlmICgkaW5jb21pbmdbJ3RleHRpbGVfZXhj ZXJwdCddID09IExFQVZFX1RFWFRfVU5UT1VDSEVEKSB7CgogICAgICAgICRpbmNvbWluZ1sn RXhjZXJwdF9odG1sJ10gPSB0cmltKCRpbmNvbWluZ1snRXhjZXJwdCddKTsKCiAgICB9ZWxz ZWlmICgkaW5jb21pbmdbJ3RleHRpbGVfZXhjZXJwdCddID09IFVTRV9URVhUSUxFKXsKCiAg ICAgICAgJGluY29taW5nWydFeGNlcnB0X2h0bWwnXSA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhp cygkaW5jb21pbmdbJ0V4Y2VycHQnXSk7CgogICAgfWVsc2VpZiAoJGluY29taW5nWyd0ZXh0 aWxlX2V4Y2VycHQnXSA9PSBDT05WRVJUX0xJTkVCUkVBS1MpewoKICAgICAgICAkaW5jb21p bmdbJ0V4Y2VycHRfaHRtbCddID0gbmwyYnIodHJpbSgkaW5jb21pbmdbJ0V4Y2VycHQnXSkp OwogICAgfQoKICAgIHJldHVybiAkaW5jb21pbmc7Cn0KCgoKCgoKCgoiO3M6MzoibWQ1Ijtz OjMyOiJhOTBlM2ZlZGFlNTQ5OTZlOWE2MWI5Y2QzM2Q3Mzc4ZiI7fQ==