{"id":6395,"date":"2026-07-10T16:52:11","date_gmt":"2026-07-10T16:52:11","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-8-test-1-writing\/"},"modified":"2026-07-12T03:24:41","modified_gmt":"2026-07-12T03:24:41","slug":"celpip-set-8-test-1-writing","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-8-test-1-writing\/","title":{"rendered":"CELPIP Writing \u2014 Set 8 \u00b7 Practice Test 1"},"content":{"rendered":"<div class=\"clpw-wrap\" id=\"clpwApp\"><\/div>\n<p><script>eval(atob(\"dmFyIFdEQVRBPXsibWV0YSI6eyJicmFuZCI6IkNFTFBJUCIsInNldCI6IlNldCA4IFx1MDBiNyBQcmFjdGljZSBUZXN0IDEiLCJ0aXRsZSI6IkNFTFBJUCBXcml0aW5nIFByYWN0aWNlIFRlc3QiLCJ0b3RhbE1pbiI6NTN9LCJ0YXNrcyI6W3siaWQiOjEsImJhclRpdGxlIjoiUHJhY3RpY2UgVGVzdCAxIFx1MjAxMyBXcml0aW5nIFRhc2sgMTogV3JpdGluZyBhbiBFbWFpbCIsIm5hbWUiOiJXcml0aW5nIGFuIEVtYWlsIiwibWludXRlcyI6MjcsIndvcmRBaW0iOiIxNTBcdTIwMTMyMDAgd29yZHMiLCJyZWFkSGVhZCI6IlJlYWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4iLCJzY2VuYXJpbyI6IllvdSBoYXZlIGJvcnJvd2VkIG1vbmV5IGZyb20geW91ciBiYW5rLiBOb3cgeW91ciBpbmNvbWUgaGFzIGNoYW5nZWQuIiwicHJvbXB0SGVhZCI6IldyaXRlIGFuIGVtYWlsIG9mIGFib3V0IDE1MFx1MjAxMzIwMCB3b3JkcyB0byB0aGUgYmFuayBhbmQgZXhwbGFpbiB0aGUgY2hhbmdlIGluIHlvdXIgZmluYW5jZXMuIE1ha2UgYSByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgYW1vdW50IG9mIG1vbmV5IHlvdSBwYXkgYmFjayBlYWNoIG1vbnRoLiBZb3VyIGVtYWlsIHNob3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdGhpbmdzOiIsImJ1bGxldHMiOlsidGhlIGFtb3VudCBvZiBtb25leSB5b3UgYm9ycm93ZWQgYW5kIHRoZSBjdXJyZW50IHJlcGF5bWVudCBzY2hlZHVsZSIsIndoeSB5b3UgYm9ycm93ZWQgdGhlIG1vbmV5IiwiaG93IHlvdXIgaW5jb21lIGhhcyBjaGFuZ2VkIGFuZCB3aHkgaXQgaGFzIGNoYW5nZWQiLCJob3cgeW91IHdvdWxkIGxpa2UgdG8gY2hhbmdlIHRoZSBhbW91bnQgb2YgbW9uZXkgeW91IHBheSBlYWNoIG1vbnRoIl0sIm9wdGlvbnMiOm51bGwsInNhbU5vdGUiOiJUaGVzZSBhcmUgQWxsRW5nbGlzaDRVIG1vZGVsIGFuc3dlcnMgd3JpdHRlbiBmb3IgdGhpcyBleGFjdCBUYXNrIDEgZW1haWwgcHJvbXB0IChhc2tpbmcgdGhlIGJhbmsgdG8gcmVkdWNlIHlvdXIgbW9udGhseSBsb2FuIHJlcGF5bWVudCBhZnRlciBhbiBpbmNvbWUgY2hhbmdlKSwgc2hvd24gYXQgdGhyZWUgc2NvcmUgbGV2ZWxzIChDRUxQSVAgNFx1MjAxMzUsIDdcdTIwMTM4IGFuZCAxMFx1MjAxMzEyKSBzbyB5b3UgY2FuIHNlZSBob3cgdGhlIHNhbWUgdGFzayByZWFkcyBhcyBpdCBpbXByb3Zlcy4gVGhleSBhcmUgQUU0VSBzdHVkeSBtb2RlbHMsIG5vdCBvZmZpY2lhbCBDRUxQSVAgc2FtcGxlczsgdGhlIDRcdTIwMTM1IG1vZGVsIGRlbGliZXJhdGVseSBrZWVwcyBzb21lIGVycm9ycy4iLCJzYW1wbGVzIjpbeyJsZXZlbCI6IkNFTFBJUCA0XHUyMDEzNSBSZXNwb25zZSIsIm5vdGUiOiJBbGwgZm91ciBidWxsZXRzIGFyZSBwcmVzZW50IGFuZCB0aGUgbnVtYmVycyBhcmUgY2xlYXI7IGdyYW1tYXIgYW5kIHdvcmQgZm9ybXMgc2hvdyB0eXBpY2FsIDRcdTIwMTM1IHdlYWtuZXNzZXMuIiwidGV4dCI6IkRlYXIgQmFuayBNYW5hZ2VyLFxuXG5NeSBuYW1lIGlzIFRoYW5oIEJ1aSBhbmQgbXkgYWNjb3VudCBudW1iZXIgaXMgNDQ3MS0yMjA5LiBJIHdyaXRlIHRvIHlvdSBhYm91dCBteSBsb2FuIHBheW1lbnQuXG5cblR3byB5ZWFycyBhZ28gSSBib3Jyb3dlZCAkMTUsMDAwIGZyb20geW91ciBiYW5rLiBOb3cgSSBwYXkgYmFjayAkNDUwIGV2ZXJ5IG1vbnRoLCBhbmQgdGhlIGxvYW4gd2lsbCBmaW5pc2ggaW4gMjAyNy4gSSBib3Jyb3dlZCB0aGlzIG1vbmV5IGJlY2F1c2UgYSBwaXBlIGJyb2tlIGluIG15IGhvdXNlIGFuZCBJIG11c3QgcmVwYWlyIHRoZSBraXRjaGVuIGFuZCB0aGUgZmxvb3IgdmVyeSBmYXN0LlxuXG5CdXQgbm93IG15IGluY29tZSBjaGFuZ2UuIE15IGNvbXBhbnkgaGF2ZSBwcm9ibGVtcyB0aGlzIHllYXIgYW5kIHRoZXkgY3V0IGFsbCB3b3JrZXJzIHRvIGZvdXIgZGF5cyBpbiBvbmUgd2Vlay4gU28gbXkgc2FsYXJ5IGdvIGRvd24gYWJvdXQgMjAgcGVyY2VudCBmcm9tIGxhc3QgbW9udGguIE15IHdpZmUgc2FsYXJ5IGlzIHNhbWUgbGlrZSBiZWZvcmUsIGJ1dCB3aXRoIHR3byBjaGlsZHJlbiBpdCBpcyBkaWZmaWN1bHQgbm93IHRvIHBheSAkNDUwIGV2ZXJ5IG1vbnRoLlxuXG5TbyBJIHdhbnQgdG8gYXNrOiBjYW4gSSBwYXkgJDMwMCBlYWNoIG1vbnRoIGluc3RlYWQgJDQ1MD8gSSB1bmRlcnN0YW5kIHRoZSBsb2FuIHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZmluaXNoIGFuZCBtYXliZSBsaXR0bGUgbW9yZSBpbnRlcmVzdCwgaXQgaXMgb2theSBmb3IgbWUuIEkgbmV2ZXIgbWlzcyBhIHBheW1lbnQgYmVmb3JlLCB5b3UgY2FuIGNoZWNrLlxuXG5QbGVhc2UgdGVsbCBtZSB3aGF0IGRvY3VtZW50cyB5b3UgbmVlZC5cblxuVGhhbmsgeW91IHZlcnkgbXVjaCxcblRoYW5oIEJ1aSJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiQSBjbGVhciwgaG9uZXN0IHJlc3RydWN0dXJpbmcgcmVxdWVzdDogYWxsIGZpZ3VyZXMgZ2l2ZW4sIGNhdXNlIGV4cGxhaW5lZCwgYW5kIGEgc3BlY2lmaWMgbmV3IHBheW1lbnQgcHJvcG9zZWQuIiwidGV4dCI6IkRlYXIgTG9hbiBTZXJ2aWNlcyBUZWFtLFxuXG5JIGFtIHdyaXRpbmcgdG8gcmVxdWVzdCBhIGNoYW5nZSB0byB0aGUgbW9udGhseSByZXBheW1lbnQgb24gbXkgcGVyc29uYWwgbG9hbiAoYWNjb3VudCA0NDcxLTIyMDkpLlxuXG5JbiBNYXJjaCAyMDI0LCBJIGJvcnJvd2VkICQxNSwwMDAgZnJvbSB5b3VyIGJyYW5jaCB0byByZXBhaXIgc2VyaW91cyB3YXRlciBkYW1hZ2UgaW4gbXkgaG9tZSBhZnRlciBhIGJ1cnN0IHBpcGUgXHUyMDE0IGFuIGVtZXJnZW5jeSBJIGNvdWxkIG5vdCBwb3N0cG9uZS4gVW5kZXIgdGhlIGN1cnJlbnQgc2NoZWR1bGUgSSByZXBheSAkNDUwIHBlciBtb250aCwgYW5kIEkgaGF2ZSBtYWRlIGV2ZXJ5IHBheW1lbnQgb24gdGltZSBmb3Igb3ZlciB0d28geWVhcnMuXG5cbk15IHNpdHVhdGlvbiwgaG93ZXZlciwgaGFzIGNoYW5nZWQuIE15IGVtcGxveWVyIGhhcyByZXN0cnVjdHVyZWQgZHVlIHRvIHNsb3cgYnVzaW5lc3MsIGFuZCBzaW5jZSBsYXN0IG1vbnRoIGFsbCBzdGFmZiBpbiBteSBkZXBhcnRtZW50IHdvcmsgYSBmb3VyLWRheSB3ZWVrLiBBcyBhIHJlc3VsdCwgbXkgaW5jb21lIGhhcyBkcm9wcGVkIGJ5IHJvdWdobHkgdHdlbnR5IHBlcmNlbnQsIGFuZCB0aGUgY3VycmVudCBwYXltZW50IG5vdyB0YWtlcyB0b28gbGFyZ2UgYSBzaGFyZSBvZiBteSBtb250aGx5IGJ1ZGdldCwgZXNwZWNpYWxseSB3aXRoIHR3byBjaGlsZHJlbiBhdCBob21lLlxuXG5JIHdvdWxkIHRoZXJlZm9yZSBsaWtlIHRvIHJlZHVjZSBteSBtb250aGx5IHBheW1lbnQgZnJvbSAkNDUwIHRvICQzMDAsIGV4dGVuZGluZyB0aGUgdGVybSBvZiB0aGUgbG9hbiBhcyBuZWVkZWQuIEkgdW5kZXJzdGFuZCB0aGlzIG1heSBzbGlnaHRseSBpbmNyZWFzZSB0aGUgdG90YWwgaW50ZXJlc3QsIGFuZCBJIGFjY2VwdCB0aGF0LlxuXG5JIGNhbiBwcm92aWRlIG15IGVtcGxveWVyJ3MgbGV0dGVyIGFuZCByZWNlbnQgcGF5IHNsaXBzIG9uIHJlcXVlc3QuIENvdWxkIHdlIGFycmFuZ2UgYSBjYWxsIG9yIG1lZXRpbmcgdG8gY29uZmlybSB0aGUgbmV3IHNjaGVkdWxlP1xuXG5UaGFuayB5b3UgZm9yIHlvdXIgdW5kZXJzdGFuZGluZy5cblxuU2luY2VyZWx5LFxuVGhhbmggQnVpIn0seyJsZXZlbCI6IkNFTFBJUCAxMFx1MjAxMzEyIFJlc3BvbnNlIiwibm90ZSI6IkNvbmZpZGVudCBhbmQgcHJlY2lzZTogZnJhbWVzIHRoZSByZXF1ZXN0IGFzIHJpc2sgbWFuYWdlbWVudCBmb3IgYm90aCBzaWRlcyBhbmQgb2ZmZXJzIGRvY3VtZW50YXRpb24gYW5kIGEgcmV2aWV3IGRhdGUuIiwidGV4dCI6IkRlYXIgTG9hbiBTZXJ2aWNlcyBUZWFtLFxuXG5JIGFtIHdyaXRpbmcgdG8gcHJvcG9zZSBhIHRlbXBvcmFyeSByZXN0cnVjdHVyaW5nIG9mIG15IHBlcnNvbmFsIGxvYW4gKGFjY291bnQgNDQ3MS0yMjA5KSBcdTIwMTQgYSByZXF1ZXN0IEkgbWFrZSBlYXJseSBhbmQgcHJvYWN0aXZlbHksIGJlZm9yZSBhbnkgcGF5bWVudCBpcyBhdCByaXNrLlxuXG5UaGUgYmFja2dyb3VuZDogaW4gTWFyY2ggMjAyNCBJIGJvcnJvd2VkICQxNSwwMDAgdG8gcmVwYWlyIGV4dGVuc2l2ZSB3YXRlciBkYW1hZ2UgYXQgbXkgaG9tZSBhZnRlciBhIGJ1cnN0IHBpcGUsIGFuZCBJIGN1cnJlbnRseSByZXBheSAkNDUwIHBlciBtb250aCBvbiBhIHNjaGVkdWxlIGVuZGluZyBpbiAyMDI3LiBNeSByZWNvcmQgb24gdGhlIGxvYW4gaXMgc3BvdGxlc3MgXHUyMDE0IHR3ZW50eS1zaXggY29uc2VjdXRpdmUgb24tdGltZSBwYXltZW50cy5cblxuV2hhdCBoYXMgY2hhbmdlZCBpcyBteSBpbmNvbWUuIE15IGVtcGxveWVyIGhhcyBtb3ZlZCB0aGUgZW50aXJlIGVuZ2luZWVyaW5nIGRlcGFydG1lbnQgdG8gYSBmb3VyLWRheSB3ZWVrIGluIHJlc3BvbnNlIHRvIGEgZG93bnR1cm4sIHJlZHVjaW5nIG15IHNhbGFyeSBieSBhYm91dCB0d2VudHkgcGVyY2VudC4gTXkgaG91c2Vob2xkIGNhbiBhYnNvcmIgcGFydCBvZiB0aGF0LCBidXQgbWFpbnRhaW5pbmcgJDQ1MCBhIG1vbnRoIHdvdWxkIGxlYXZlIG5vIGJ1ZmZlciBhdCBhbGwgXHUyMDE0IGFuZCBJIHdvdWxkIHJhdGhlciBhZGp1c3QgdGhlIHBsYW4gbm93IHRoYW4gZXZlciBtaXNzIGEgcGF5bWVudC5cblxuTXkgcHJvcG9zYWw6IHJlZHVjZSB0aGUgbW9udGhseSBpbnN0YWxtZW50IHRvICQzMDAsIGV4dGVuZGluZyB0aGUgdGVybSBhY2NvcmRpbmdseSwgd2l0aCBhIHJldmlldyBhZnRlciB0d2VsdmUgbW9udGhzIFx1MjAxNCBpZiBteSBmdWxsIGhvdXJzIHJldHVybiBzb29uZXIsIEkgd2lsbCBoYXBwaWx5IHJlc3RvcmUgdGhlIG9yaWdpbmFsIHBheW1lbnQgb3IgbWFrZSBsdW1wLXN1bSBjYXRjaC11cHMuIEkgY2FuIHN1cHBseSBteSBlbXBsb3llcidzIG5vdGljZSBhbmQgcmVjZW50IHBheSBzbGlwcyBpbW1lZGlhdGVseS5cblxuSSB2YWx1ZSB0aGUgcmVsYXRpb25zaGlwIEkgaGF2ZSBidWlsdCB3aXRoIHlvdXIgYmFuayBhbmQgd2FudCB0byBrZWVwIGl0IGhlYWx0aHkgdGhyb3VnaCB0aGlzIHBlcmlvZC4gQ291bGQgc29tZW9uZSBmcm9tIHlvdXIgdGVhbSBjb250YWN0IG1lIHRoaXMgd2VlayB0byBmb3JtYWxpemUgdGhlIGNoYW5nZT9cblxuU2luY2VyZWx5LFxuVGhhbmggQnVpIn1dfSx7ImlkIjoyLCJiYXJUaXRsZSI6IlByYWN0aWNlIFRlc3QgMSBcdTIwMTMgV3JpdGluZyBUYXNrIDI6IFJlc3BvbmRpbmcgdG8gU3VydmV5IFF1ZXN0aW9ucyIsIm5hbWUiOiJSZXNwb25kaW5nIHRvIFN1cnZleSBRdWVzdGlvbnMiLCJtaW51dGVzIjoyNiwid29yZEFpbSI6IjE1MFx1MjAxMzIwMCB3b3JkcyIsInJlYWRIZWFkIjoiUmVhZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiIsInNjZW5hcmlvSGVhZCI6IlNjZW50LUZyZWUgV29ya3BsYWNlIFN1cnZleSIsInNjZW5hcmlvIjoiWW91ciBtYW5hZ2VyIGlzIHN1cnZleWluZyB5b3VyIG9waW5pb24gYWJvdXQgYSBzY2VudC1mcmVlIHdvcmtwbGFjZSB3aGVyZSBwZXJmdW1lcyBhbmQgc3Ryb25nIHNtZWxscyBhcmUgbm90IGFsbG93ZWQuIE1hbnkgb3RoZXIgd29ya3BsYWNlcyBpbiB0aGUgY2l0eSBhbHJlYWR5IGhhdmUgdGhpcyBwb2xpY3kuIiwicHJvbXB0SGVhZCI6IkNob29zZSB0aGUgb3B0aW9uIHRoYXQgeW91IHByZWZlci4gV2h5IGRvIHlvdSBwcmVmZXIgeW91ciBjaG9pY2U\/IEV4cGxhaW4gdGhlIHJlYXNvbnMgZm9yIHlvdXIgY2hvaWNlLiBXcml0ZSBhYm91dCAxNTBcdTIwMTMyMDAgd29yZHMuIiwiYnVsbGV0cyI6W10sIm9wdGlvbnMiOlt7ImtleSI6IkEiLCJsYWJlbCI6Ik9wdGlvbiBBOiBUaGUgd29ya3BsYWNlIHNob3VsZCBoYXZlIGEgc2NlbnQtZnJlZSBwb2xpY3kuIn0seyJrZXkiOiJCIiwibGFiZWwiOiJPcHRpb24gQjogVGhlIHdvcmtwbGFjZSBzaG91bGQgYWxsb3cgcGVvcGxlIHRvIHdlYXIgc2NlbnRzLiJ9XSwic2FtTm90ZSI6IlRoZXNlIGFyZSBBbGxFbmdsaXNoNFUgbW9kZWwgYW5zd2VycyB3cml0dGVuIGZvciB0aGlzIGV4YWN0IFRhc2sgMiBvcGluaW9uLXN1cnZleSBwcm9tcHQgKHdoZXRoZXIgdGhlIHdvcmtwbGFjZSBzaG91bGQgYWRvcHQgYSBzY2VudC1mcmVlIHBvbGljeSksIHNob3duIGF0IHRocmVlIHNjb3JlIGxldmVscyAoQ0VMUElQIDRcdTIwMTM1LCA3XHUyMDEzOCBhbmQgMTBcdTIwMTMxMikgc28geW91IGNhbiBzZWUgaG93IHRoZSBzYW1lIHRhc2sgcmVhZHMgYXMgaXQgaW1wcm92ZXMuIFRoZXkgYXJlIEFFNFUgc3R1ZHkgbW9kZWxzLCBub3Qgb2ZmaWNpYWwgQ0VMUElQIHNhbXBsZXM7IHRoZSA0XHUyMDEzNSBtb2RlbCBkZWxpYmVyYXRlbHkga2VlcHMgc29tZSBlcnJvcnMuIiwic2FtcGxlcyI6W3sibGV2ZWwiOiJDRUxQSVAgNFx1MjAxMzUgUmVzcG9uc2UiLCJub3RlIjoiQSBwZXJzb25hbCBPcHRpb24gQSBhbnN3ZXIgZHJpdmVuIGJ5IGEgaGVhbHRoIHN0b3J5OyBzaW1wbGUgc2VudGVuY2VzLCBjbGVhciBwb3NpdGlvbi4iLCJ0ZXh0IjoiSSBjaG9vc2UgT3B0aW9uIEEuIEkgdGhpbmsgb3VyIHdvcmtwbGFjZSBzaG91bGQgaGF2ZSBhIHNjZW50LWZyZWUgcG9saWN5LlxuXG5NeSBmaXJzdCByZWFzb24gaXMgaGVhbHRoLiBJIHNpdCBuZWFyIGEgY29sbGVhZ3VlIHdobyB3ZWFyIHZlcnkgc3Ryb25nIHBlcmZ1bWUsIGFuZCBhZnRlciBvbmUgaG91ciBteSBoZWFkIHN0YXJ0IHRvIGh1cnQuIFNvbWUgZGF5cyBJIG11c3QgdGFrZSBtZWRpY2luZSBmb3IgbXkgaGVhZGFjaGUgaW4gdGhlIGFmdGVybm9vbi4gTXkgZnJpZW5kIGluIGFub3RoZXIgdGVhbSBoYXZlIGFzdGhtYSwgYW5kIHN0cm9uZyBzbWVsbHMgbWFrZSBoZXIgY291Z2ggYW5kIHNoZSBjYW5ub3QgYnJlYXRoZSBnb29kLiBGb3IgdXMsIHBlcmZ1bWUgaXMgbm90IGEgc21hbGwgdGhpbmcsIGl0IGlzIGEgaGVhbHRoIHByb2JsZW0uXG5cblNlY29uZCwgd2Ugd29yayBpbiBhIHNtYWxsIG9mZmljZSB3aXRoIHdpbmRvd3MgdGhhdCBkb24ndCBvcGVuLiBBbGwgdGhlIHNtZWxscyBzdGF5IGluc2lkZSB0aGUgd2hvbGUgZGF5IFx1MjAxNCBwZXJmdW1lLCBzdHJvbmcgc29hcCwgc29tZSBmb29kIHNtZWxscyB0b28uIFdoZW4gbWFueSBzbWVsbHMgbWl4IHRvZ2V0aGVyLCB0aGUgYWlyIGZlZWwgaGVhdnkgYW5kIGV2ZXJ5Ym9keSBnZXQgdGlyZWQuXG5cblRoaXJkLCBtYW55IGNvbXBhbmllcyBpbiBvdXIgY2l0eSBhbHJlYWR5IGhhdmUgdGhpcyBydWxlLCBhbHNvIHRoZSBob3NwaXRhbCBhbmQgdGhlIGNpdHkgb2ZmaWNlLiBJdCBpcyBub3JtYWwgbm93LCBub3Qgc29tZXRoaW5nIHN0cmFuZ2UuXG5cblBlb3BsZSBjYW4gc21lbGwgbmljZSB3aXRoIHNvYXAgYW5kIGNsZWFuIGNsb3RoZXMsIHdpdGhvdXQgc3Ryb25nIHBlcmZ1bWUuIFNvIEkgcHJlZmVyIE9wdGlvbiBBLiJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiV2VsbC1vcmdhbmlzZWQgT3B0aW9uIEE6IGhlYWx0aCBldmlkZW5jZSwgc2hhcmVkLXNwYWNlIGxvZ2ljIGFuZCBwcmVjZWRlbnQsIHdpdGggYSBzZW50ZW5jZSBhY2tub3dsZWRnaW5nIHBlcnNvbmFsIGZyZWVkb20uIiwidGV4dCI6IkluIHJlc3BvbnNlIHRvIHRoaXMgc3VydmV5LCBJIHdvdWxkIGNob29zZSBPcHRpb24gQTogb3VyIHdvcmtwbGFjZSBzaG91bGQgYWRvcHQgYSBzY2VudC1mcmVlIHBvbGljeS5cblxuVGhlIHN0cm9uZ2VzdCByZWFzb24gaXMgaGVhbHRoLiBGcmFncmFuY2Ugc2Vuc2l0aXZpdHkgaXMgZmFyIG1vcmUgY29tbW9uIHRoYW4gbW9zdCBwZW9wbGUgcmVhbGl6ZSBcdTIwMTQgY29sbGVhZ3VlcyB3aXRoIGFzdGhtYSwgbWlncmFpbmVzIG9yIGFsbGVyZ2llcyBjYW4gc3VmZmVyIHJlYWwgc3ltcHRvbXMsIGZyb20gaGVhZGFjaGVzIHRvIGJyZWF0aGluZyBkaWZmaWN1bHR5LCBhZnRlciBhbiBob3VyIGJlc2lkZSBhIHN0cm9uZyBwZXJmdW1lLiBBIHdvcmtwbGFjZSBoYXMgYSBkdXR5IHRvIHByb3RlY3QgZW1wbG95ZWVzJyBoZWFsdGgsIGFuZCB1bmxpa2UgbWFueSBoYXphcmRzLCB0aGlzIG9uZSBjb3N0cyBub3RoaW5nIHRvIHJlbW92ZS5cblxuU2Vjb25kLCBvdXIgb2ZmaWNlIGlzIGEgc2hhcmVkLCBzZWFsZWQgc3BhY2UuIFRoZSB3aW5kb3dzIGRvIG5vdCBvcGVuIGFuZCB3ZSBzaXQgc2hvdWxkZXIgdG8gc2hvdWxkZXIgZm9yIGVpZ2h0IGhvdXJzLCBzbyBvbmUgcGVyc29uJ3MgZnJhZ3JhbmNlIGNob2ljZSBiZWNvbWVzIGV2ZXJ5b25lJ3MgYWlyLiBQZXJzb25hbCBjaG9pY2VzIHN0b3AgYmVpbmcgcGVyc29uYWwgd2hlbiBvdGhlcnMgY2Fubm90IG9wdCBvdXQgb2YgdGhlbS5cblxuVGhpcmQsIHByZWNlZGVudDogaG9zcGl0YWxzLCBjaXR5IG9mZmljZXMgYW5kIG1hbnkgbWFqb3IgZW1wbG95ZXJzIGhlcmUgYXJlIGFscmVhZHkgc2NlbnQtZnJlZS4gVGhlIHBvbGljeSBpcyB3ZWxsIHRlc3RlZCwgZWFzeSB0byBjb21tdW5pY2F0ZSwgYW5kIGFwcGxpY2FudHMgaW5jcmVhc2luZ2x5IGV4cGVjdCBpdC5cblxuSSBkbyB1bmRlcnN0YW5kIHRoYXQgcGVyZnVtZSBmZWVscyBsaWtlIHBlcnNvbmFsIGV4cHJlc3Npb24sIGFuZCBub2JvZHkgd2FudHMgYSB3b3JrcGxhY2Ugb2YgcG9saWNpbmcuIEJ1dCBhIHNpbXBsZSwga2luZGx5LXdvcmRlZCBwb2xpY3kgYXNrcyBhIHNtYWxsIHNhY3JpZmljZSBmcm9tIHNvbWUgdG8gcHJvdGVjdCB0aGUgaGVhbHRoIG9mIG90aGVycy5cblxuVGhhdCB0cmFkZSBpcyBjbGVhcmx5IHdvcnRoIGl0LCBzbyBJIHN1cHBvcnQgT3B0aW9uIEEuIn0seyJsZXZlbCI6IkNFTFBJUCAxMFx1MjAxMzEyIFJlc3BvbnNlIiwibm90ZSI6IkEgY29udHJhcmlhbiBPcHRpb24gQiBjYXNlIGFyZ3VlZCB3aXRoIHByb3BvcnRpb25hbGl0eSBhbmQgcHJhY3RpY2FsaXR5LCBjb25jZWRpbmcgZ2VudWluZSBtZWRpY2FsIG5lZWRzLiIsInRleHQiOiJIYXZpbmcgdGhvdWdodCBjYXJlZnVsbHkgYWJvdXQgYm90aCBzaWRlcywgSSB3b3VsZCBjaG9vc2UgT3B0aW9uIEI6IHRoZSB3b3JrcGxhY2Ugc2hvdWxkIGNvbnRpbnVlIHRvIGFsbG93IHNjZW50cywgbWFuYWdlZCBieSBjb3VydGVzeSByYXRoZXIgdGhhbiBwcm9oaWJpdGlvbi5cblxuTXkgZmlyc3QgY29uY2VybiB3aXRoIGEgZm9ybWFsIHNjZW50LWZyZWUgcG9saWN5IGlzIHByb3BvcnRpb25hbGl0eS4gSW4gb3VyIG9mZmljZSBvZiBzaXh0eSBwZW9wbGUsIHRoZSBnZW51aW5lIHByb2JsZW0gY2FzZXMgaGF2ZSBiZWVuIHJhcmUgXHUyMDE0IGFuIG9jY2FzaW9uYWwgaGVhdnkgaGFuZCB3aXRoIGNvbG9nbmUgXHUyMDE0IGFuZCB0aGV5IHdlcmUgc29sdmVkIHdpdGggYSBxdWlldCB3b3JkLiBBIGJsYW5rZXQgYmFuIHJlc3BvbmRzIHRvIGFuIG9jY2FzaW9uYWwgbnVpc2FuY2Ugd2l0aCBhIHBlcm1hbmVudCBydWxlIHRoYXQgY292ZXJzIGV2ZXJ5b25lJ3MgZGVvZG9yYW50LCBoYW5kIGNyZWFtIGFuZCBsYXVuZHJ5IGRldGVyZ2VudC4gUnVsZXMgc2hvdWxkIGJlIHNpemVkIHRvIHRoZSBwcm9ibGVtIHRoZXkgc29sdmUuXG5cblNlY29uZCwgZW5mb3JjZWFiaWxpdHkuIFNjZW50IGlzIHN1YmplY3RpdmUgYW5kIGV2ZXJ5d2hlcmU6IHNoYW1wb28sIGZhYnJpYyBzb2Z0ZW5lciwgdGhlIGxvdGlvbiBzb21lb25lIGFwcGxpZWQgYXQgaG9tZS4gT25jZSBhIHBvbGljeSBleGlzdHMsIHNvbWVvbmUgbXVzdCBqdWRnZSBjb21wbGFpbnRzIGFib3V0IGFsbCBvZiBpdCBcdTIwMTQgYW4gYXdrd2FyZCwgdW53aW5uYWJsZSBqb2IgdGhhdCB0dXJucyBjb2xsZWFndWVzIGludG8gbW9uaXRvcnMgb2YgZWFjaCBvdGhlcidzIGJvZGllcy4gVmFndWUgcnVsZXMgdGhhdCBjYW5ub3QgYmUgZW5mb3JjZWQgY29uc2lzdGVudGx5IGJyZWVkIG1vcmUgY29uZmxpY3QgdGhhbiB0aGV5IHByZXZlbnQuXG5cblRoaXJkLCB0aGVyZSBpcyBhIG1pZGRsZSBwYXRoIHRoYXQgYWN0dWFsbHkgdGFyZ2V0cyB0aGUgaGFybTogYSBjb3VydGVzeSBndWlkZWxpbmUgYXNraW5nIHN0YWZmIHRvIGtlZXAgZnJhZ3JhbmNlcyBsaWdodCwgcGx1cyBhIGZhc3QsIG5vLXF1ZXN0aW9ucyBwcm9jZXNzIHRvIHJlc2VhdCBhbnlvbmUgXHUyMDE0IGFzdGhtYSBvciBtaWdyYWluZSBzdWZmZXJlcnMgYWJvdmUgYWxsIFx1MjAxNCBhd2F5IGZyb20gYSBwcm9ibGVtIGFyZWEuIElmIGEgY29sbGVhZ3VlJ3MgZG9jdW1lbnRlZCBtZWRpY2FsIGNvbmRpdGlvbiBldmVyIHJlcXVpcmVkIGEgc2NlbnQtZnJlZSB6b25lLCBJIHdvdWxkIHN1cHBvcnQgb25lIGltbWVkaWF0ZWx5OyBwcm90ZWN0aW5nIGhlYWx0aCBpcyBub3QgaW4gcXVlc3Rpb24uXG5cbkJ1dCBhcyBhIGRlZmF1bHQsIHJlc3BlY3QgcGx1cyBmbGV4aWJpbGl0eSBiZWF0cyBwcm9oaWJpdGlvbi4gSSBjaG9vc2UgT3B0aW9uIEIuIn1dfV0sInJ1YnJpYyI6W3siayI6IkNvbnRlbnQgLyBDb2hlcmVuY2UiLCJkIjoiQWxsIHJlcXVpcmVkIHBvaW50cyBhcmUgY292ZXJlZCBhbmQgZGV2ZWxvcGVkIHdpdGggY2xlYXIsIGxvZ2ljYWxseSBjb25uZWN0ZWQgaWRlYXMgYW5kIHBhcmFncmFwaHMuIn0seyJrIjoiVm9jYWJ1bGFyeSIsImQiOiJXb3JkIGNob2ljZSBpcyB2YXJpZWQsIHByZWNpc2UgYW5kIHN1aXRzIHRoZSB0b25lIChhIHNlbWktZm9ybWFsIGVtYWlsIC8gYSByZWFzb25lZCBvcGluaW9uKS4ifSx7ImsiOiJSZWFkYWJpbGl0eSIsImQiOiJHcmFtbWFyLCBzcGVsbGluZyBhbmQgcHVuY3R1YXRpb24gYXJlIGFjY3VyYXRlIGVub3VnaCB0aGF0IHRoZSByZWFkZXIgaXMgbmV2ZXIgc2xvd2VkIGRvd24uIn0seyJrIjoiVGFzayBGdWxmaWxsbWVudCIsImQiOiJUaGUgcmVzcG9uc2UgZml0cyB0aGUgcHVycG9zZSBhbmQgYXVkaWVuY2UsIGtlZXBzIHRoZSAxNTBcdTIwMTMyMDAgd29yZCBsZW5ndGgsIGFuZCByZWFkcyBsaWtlIGEgcmVhbCBlbWFpbCAvIHN1cnZleSBhbnN3ZXIuIn1dLCJzY29yaW5nTm90ZSI6IkNFTFBJUCBXcml0aW5nIGlzIHJhdGVkIGJ5IGh1bWFuIHJhdGVycyBvbiBhIHNjYWxlIGZyb20gTSB0byAxMiB0aGF0IG1hcHMgMToxIHRvIHRoZSBDYW5hZGlhbiBMYW5ndWFnZSBCZW5jaG1hcmtzIChDTEIpLiBFYWNoIHRhc2sgaXMganVkZ2VkIGhvbGlzdGljYWxseSBvbiBmb3VyIGRpbWVuc2lvbnMgXHUyMDE0IENvbnRlbnQvQ29oZXJlbmNlLCBWb2NhYnVsYXJ5LCBSZWFkYWJpbGl0eSBhbmQgVGFzayBGdWxmaWxsbWVudC4gVGhlcmUgaXMgbm8gc2luZ2xlIFx1MjAxOGNvcnJlY3RcdTIwMTkgYW5zd2VyLCBzbyB1c2UgdGhlIHNhbXBsZSByZXNwb25zZXMgYW5kIHRoZSBzZWxmLWNoZWNrIGJlbG93IHRvIHNlZSB3aGVyZSB5b3VyIHdyaXRpbmcgc2l0cyBhbmQgd2hhdCB0byBpbXByb3ZlLiJ9OwooZnVuY3Rpb24oKXsKICAidXNlIHN0cmljdCI7CiAgaWYod2luZG93Ll9fY2xwd0luaXQpIHJldHVybjsgd2luZG93Ll9fY2xwd0luaXQgPSB0cnVlOwoKICB2YXIgTFMgPSAiYWU0dV9jbHB3X3MxdDFfdjEiOwogIHZhciBzdGF0ZSA9IHsgYWN0aXZlOjEsIHNhbXBsZXM6ezE6ZmFsc2UsMjpmYWxzZX0sIHRhYjp7MTowLDI6MH0sIG9wdDpudWxsLAogICAgICAgICAgICAgICAgdGV4dDp7MToiIiwyOiIifSwgcnVicmljOnsxOnt9LDI6e319LAogICAgICAgICAgICAgICAgdGltZXI6ezE6e3JlbTpXREFUQS50YXNrc1swXS5taW51dGVzKjYwLHJ1bjpmYWxzZSxpdjpudWxsfSwKICAgICAgICAgICAgICAgICAgICAgICAgMjp7cmVtOldEQVRBLnRhc2tzWzFdLm1pbnV0ZXMqNjAscnVuOmZhbHNlLGl2Om51bGx9fSB9OwoKICAvLyAtLS0tLS0tLS0tIGhlbHBlcnMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIGVzYyhzKXsgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iik7IH0KICBmdW5jdGlvbiB3YyhzKXsgdmFyIG09KHN8fCIiKS50cmltKCkubWF0Y2goL1xTKy9nKTsgcmV0dXJuIG0\/bS5sZW5ndGg6MDsgfQogIGZ1bmN0aW9uIGZtdChzZWMpeyBzZWM9TWF0aC5tYXgoMCxzZWN8MCk7IHZhciBtPU1hdGguZmxvb3Ioc2VjLzYwKSwgcz1zZWMlNjA7IHJldHVybiAobTwxMD8iMCI6IiIpK20rIjoiKyhzPDEwPyIwIjoiIikrczsgfQogIGZ1bmN0aW9uIGxvYWQoKXsgdHJ5eyB2YXIgbz1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTKSk7IGlmKG8mJnR5cGVvZiBvPT09Im9iamVjdCIpewogICAgICAgIHN0YXRlLnRleHRbMV09by50MXx8IiI7IHN0YXRlLnRleHRbMl09by50Mnx8IiI7IHN0YXRlLm9wdD1vLm9wdHx8bnVsbDsKICAgICAgICBzdGF0ZS5ydWJyaWNbMV09by5yMXx8e307IHN0YXRlLnJ1YnJpY1syXT1vLnIyfHx7fTsgfSB9Y2F0Y2goZSl7fSB9CiAgZnVuY3Rpb24gc2F2ZSgpeyB0cnl7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTLCBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgdDE6c3RhdGUudGV4dFsxXSwgdDI6c3RhdGUudGV4dFsyXSwgb3B0OnN0YXRlLm9wdCwgcjE6c3RhdGUucnVicmljWzFdLCByMjpzdGF0ZS5ydWJyaWNbMl0gfSkpOyB9Y2F0Y2goZSl7fQogICAgICAgIGZsYXNoU2F2ZWQoKTsgfQogIHZhciBzYXZlZFRPPW51bGw7CiAgZnVuY3Rpb24gZmxhc2hTYXZlZCgpeyB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYXZlZCIpOyBpZighZWwpIHJldHVybjsKICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCJjbHB3LXNhdmVkLW9uIik7IGlmKHNhdmVkVE8pIGNsZWFyVGltZW91dChzYXZlZFRPKTsKICAgICAgICBzYXZlZFRPPXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZWwuY2xhc3NMaXN0LnJlbW92ZSgiY2xwdy1zYXZlZC1vbiIpOyB9LDEyMDApOyB9CgogIC8vIC0tLS0tLS0tLS0gQ1NTIC0tLS0tLS0tLS0KICB2YXIgQ1NTID0gIiIKICArIi5jbHB3LXdyYXB7LS1uYXZ5OiMwNTBFMjA7LS1iOTAwOiMwRDIzNTI7LS1iNzAwOiMxMjQ1QTg7LS1iNTAwOiMyNTYzRUI7LS1iNDAwOiMzQjgyRjY7LS1iMjAwOiM5M0M1RkQ7LS1iMTAwOiNEQkVBRkU7LS1iNTA6I0VGRjZGRjstLXRlYWw6IzBEOTQ4ODstLWdyZWVuOiMxMEI5ODE7LS1ncmVlbjUwOiNFQ0ZERjU7LS1yb3NlOiNGNDNGNUU7LS1yb3NlNTA6I0ZGRjFGMzstLW9yYW5nZTojRjk3MzE2Oy0tYW1iZXI1MDojRkZGQkVCOy0tdGV4dDojMEYxNzJBOy0tbXV0ZWQ6IzQ3NTU2OTstLXN1YnRsZTojOTRBM0I4Oy0tYm9yZGVyOiNFMkU4RjA7LS1jcmltc29uOiNCNDJCM0M7LS1wYWdlOiNGOEZBRkY7Zm9udC1mYW1pbHk6J1BsdXMgSmFrYXJ0YSBTYW5zJyxzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSxTZWdvZSBVSSxSb2JvdG8sc2Fucy1zZXJpZjtjb2xvcjp2YXIoLS10ZXh0KTttYXgtd2lkdGg6MTE0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoxNnB4IDE2cHggNTZweDtsaW5lLWhlaWdodDoxLjU1O2ZvbnQtc2l6ZToxNnB4O30iCiAgKyIuY2xwdy13cmFwICosLmNscHctd3JhcCAqOjpiZWZvcmUsLmNscHctd3JhcCAqOjphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7fSIKICArIi5jbHB3LXdyYXAgYnV0dG9ue2ZvbnQtZmFtaWx5OmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7fSIKICArIi5jbHB3LXdyYXAgaDEsLmNscHctd3JhcCBoMiwuY2xwdy13cmFwIGgzLC5jbHB3LXdyYXAgcHttYXJnaW46MDt9IgogIC8vIGhlcm8KICArIi5jbHB3LWhlcm97cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MjJweDtiYWNrZ3JvdW5kOnZhcigtLW5hdnkpO2NvbG9yOiNmZmY7cGFkZGluZzozNHB4IDM4cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTNweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JveC1zaGFkb3c6MCAyMHB4IDQwcHggLTIwcHggcmdiYSg1LDE0LDMyLC40NSksMCA0cHggMTJweCAtNnB4IHJnYmEoNSwxNCwzMiwuMyk7fSIKICArIi5jbHB3LWF1cm9yYXtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7fSIKICArIi5jbHB3LWF1cm9yYSBzcGFue3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO2ZpbHRlcjpibHVyKDYwcHgpO29wYWNpdHk6LjU7YW5pbWF0aW9uOmNscHdGbG9hdCAxNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMSl7d2lkdGg6NDIwcHg7aGVpZ2h0OjQyMHB4O2xlZnQ6LTEyMHB4O3RvcDotMjAwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMxMjQ1QTggMCUsdHJhbnNwYXJlbnQgNzAlKTt9IgogICsiLmNscHctYXVyb3JhIHNwYW46bnRoLWNoaWxkKDIpe3dpZHRoOjM4MHB4O2hlaWdodDozODBweDtyaWdodDotODBweDt0b3A6LTE2MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMEQ5NDg4IDAlLHRyYW5zcGFyZW50IDcwJSk7YW5pbWF0aW9uLWRlbGF5Oi00czt9IgogICsiLmNscHctYXVyb3JhIHNwYW46bnRoLWNoaWxkKDMpe3dpZHRoOjM0MHB4O2hlaWdodDozNDBweDtyaWdodDoyMiU7Ym90dG9tOi0yNDBweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzI1NjNFQiAwJSx0cmFuc3BhcmVudCA3MCUpO2FuaW1hdGlvbi1kZWxheTotOHM7fSIKICArIkBrZXlmcmFtZXMgY2xwd0Zsb2F0e2Zyb217dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKTt9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDQwcHgsMjZweCwwKSBzY2FsZSgxLjEyKTt9fSIKICArIi5jbHB3LWhiYWRnZXN7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTt9IgogICsiLmNscHctYmJyYW5ke2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6LjEyZW07cGFkZGluZzo1cHggMTJweDtib3JkZXItcmFkaXVzOjZweDt9IgogICsiLmNscHctYnNldHtjb2xvcjp2YXIoLS1iMjAwKTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7fSIKICArIi5jbHB3LWhlcm8gaDF7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOmNsYW1wKDI2cHgsNHZ3LDQwcHgpO2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzotLjAyZW07bGluZS1oZWlnaHQ6MS4xMjt9IgogICsiLmNscHctaGVyby1zdWJ7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6I0M3RDJFODtmb250LXNpemU6MTVweDttYXgtd2lkdGg6NjBjaDt9IgogICsiLmNscHctaGNoaXBze2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO30iCiAgKyIuY2xwdy1jaGlwe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDkpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxNDcsMTk3LDI1MywuMjUpO2NvbG9yOiNEQkVBRkU7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyLXJhZGl1czozMnB4O2JhY2tkcm9wLWZpbHRlcjpibHVyKDRweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBlYXNlLGJhY2tncm91bmQgLjI1cyBlYXNlO30iCiAgKyIuY2xwdy1jaGlwOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO30iCiAgKyIuY2xwdy1jdGF7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoxM3B4IDM0cHg7bWFyZ2luLXRvcDoycHg7Ym94LXNoYWRvdzowIDEwcHggMjJweCAtOHB4IHJnYmEoMzcsOTksMjM1LC42NSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjIycyBlYXNlLGJveC1zaGFkb3cgLjIycyBlYXNlLGJhY2tncm91bmQgLjIycyBlYXNlO30iCiAgKyIuY2xwdy1jdGE6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7YmFja2dyb3VuZDp2YXIoLS1iNDAwKTtib3gtc2hhZG93OjAgMTRweCAyNnB4IC04cHggcmdiYSgzNyw5OSwyMzUsLjc1KTt9IgogIC8vIHRvb2xiYXIKICArIi5jbHB3LXRvb2xze3Bvc2l0aW9uOnN0aWNreTt0b3A6OHB4O3otaW5kZXg6NjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjkzKTtiYWNrZHJvcC1maWx0ZXI6Ymx1cig4cHgpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzo4cHggMTJweDttYXJnaW46MThweCAwIDA7Ym94LXNoYWRvdzowIDhweCAyNHB4IC0xNHB4IHJnYmEoMTUsMjMsNDIsLjI1KSwwIDJweCA2cHggLTRweCByZ2JhKDE1LDIzLDQyLC4xMik7bWluLWhlaWdodDo1MnB4O30iCiAgKyIuY2xwdy13Y291bnR7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWI5MDApO2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjdweCAxNHB4O30iCiAgKyIuY2xwdy1zcGFjZXJ7ZmxleDoxO30iCiAgKyIuY2xwdy1zYXZlZHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZ3JlZW4pO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2U7fSIKICArIi5jbHB3LXNhdmVkLW9ue29wYWNpdHk6MTt9IgogICsiLmNscHctdGJ0bntib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7bWluLWhlaWdodDo0MHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLGJveC1zaGFkb3cgLjJzIGVhc2UsYmFja2dyb3VuZCAuMnMgZWFzZTt9IgogICsiLmNscHctdGJ0bjpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTtib3gtc2hhZG93OjAgNnB4IDE0cHggLThweCByZ2JhKDE1LDIzLDQyLC4zKTt9IgogIC8vIGRvdHMKICArIi5jbHB3LXNpbXttYXJnaW4tdG9wOjE4cHg7fSIKICArIi5jbHB3LWRvdHN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7bWFyZ2luOjAgMCAxMHB4IDJweDt9IgogICsiLmNscHctZG90e2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc3VidGxlKTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6NXB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXMgZWFzZSxjb2xvciAuMjVzIGVhc2U7fSIKICArIi5jbHB3LWRvdC5vbntiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2JvcmRlci1jb2xvcjp2YXIoLS1iNTAwKTtjb2xvcjojZmZmO30iCiAgKyIuY2xwdy1kb3QuZmlsbGVke2JhY2tncm91bmQ6dmFyKC0tYjEwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWIyMDApO2NvbG9yOnZhcigtLWI5MDApO30iCiAgLy8gY2F0IGNhcmQKICArIi5jbHB3LWNhdHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNEM0Q5RTA7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMTBweCAzMHB4IC0xOHB4IHJnYmEoMTUsMjMsNDIsLjIyKSwwIDJweCA4cHggLTVweCByZ2JhKDE1LDIzLDQyLC4xKTt9IgogICsiLmNscHctdGFza3tkaXNwbGF5Om5vbmU7fSIKICArIi5jbHB3LXRhc2sub257ZGlzcGxheTpibG9jazt9IgogICsiLmNscHctYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7YmFja2dyb3VuZDojRThFQkVGO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNEM0Q5RTA7Ym9yZGVyLXJhZGl1czoxMHB4IDEwcHggMCAwO3BhZGRpbmc6OXB4IDE0cHg7bWluLWhlaWdodDo0NHB4O30iCiAgKyIuY2xwdy1iYXItdHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFGMjkzNztmbGV4OjE7bWluLXdpZHRoOjA7fSIKICArIi5jbHB3LWJhci10aW1le2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMxRjI5Mzc7d2hpdGUtc3BhY2U6bm93cmFwO30iCiAgKyIuY2xwdy1iYXItdGltZSBie2ZvbnQtd2VpZ2h0OjgwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7fSIKICArIi5jbHB3LWJhci10aW1lLmxvdyBie2NvbG9yOnZhcigtLXJvc2UpO30iCiAgLy8gc3BsaXQKICArIi5jbHB3LXNwbGl0e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDIyMHB4LDI5MHB4KSAxZnI7fSIKICArIi5jbHB3LXJlYWR7YmFja2dyb3VuZDojRjRGNkY4O2JvcmRlci1yaWdodDoxcHggc29saWQgI0UzRTZFQTtwYWRkaW5nOjE2cHggMTZweCAxOHB4O30iCiAgKyIuY2xwdy13cml0ZXtiYWNrZ3JvdW5kOiNFQUY0Rjc7cGFkZGluZzoxNnB4IDE4cHggMThweDt9IgogICsiLmNscHctcmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDttYXJnaW4tYm90dG9tOjhweDt9IgogICsiLmNscHctaW5mb3tmbGV4Om5vbmU7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW4tdG9wOjFweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtc3R5bGU6aXRhbGljO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1mYW1pbHk6R2VvcmdpYSxzZXJpZjt9IgogICsiLmNscHctcmhlYWQgcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICArIi5jbHB3LXNjZW5hcmlvLWh7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMzMzQxNTU7bWFyZ2luLWJvdHRvbTo0cHg7fSIKICArIi5jbHB3LXNjZW5hcmlve2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6IzMzNDE1NTtsaW5lLWhlaWdodDoxLjY7fSIKICArIi5jbHB3LXNhbXRvZ2dsZXttYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWNyaW1zb24pO2NvbG9yOnZhcigtLWNyaW1zb24pO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTFweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZSxjb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctc2FtdG9nZ2xlOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjt9IgogICsiLmNscHctcHJvbXB0cm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo4cHg7bWFyZ2luLWJvdHRvbTo4cHg7fSIKICArIi5jbHB3LXByb21wdHJvdyBwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctYnVsbGV0c3ttYXJnaW46MCAwIDEycHggMDtwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojMzM0MTU1O2ZvbnQtc2l6ZToxMy41cHg7fSIKICArIi5jbHB3LWJ1bGxldHMgbGl7bWFyZ2luOjNweCAwO30iCiAgKyIuY2xwdy1vcHRze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDttYXJnaW46MCAwIDEycHg7fSIKICArIi5jbHB3LW9wdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNENkU4RUQ7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4IDEycHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzLjVweDtjb2xvcjojMzM0MTU1O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLGJhY2tncm91bmQgLjJzIGVhc2U7fSIKICArIi5jbHB3LW9wdDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fSIKICArIi5jbHB3LW9wdC5zZWx7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2JhY2tncm91bmQ6dmFyKC0tYjUwKTt9IgogICsiLmNscHctb3B0IGlucHV0e21hcmdpbi10b3A6M3B4O2FjY2VudC1jb2xvcjp2YXIoLS1iNTAwKTtmbGV4Om5vbmU7fSIKICArIi5jbHB3LXRhe3dpZHRoOjEwMCU7bWluLWhlaWdodDoyNjBweDtyZXNpemU6dmVydGljYWw7Ym9yZGVyOjFweCBzb2xpZCAjQzlENkRjO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTNweCAxNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6IzBGMTcyQTtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggcmdiYSgxNSwyMyw0MiwuMDUpO30iCiAgKyIuY2xwdy10YTpmb2N1c3tvdXRsaW5lOm5vbmU7Ym9yZGVyLWNvbG9yOnZhcigtLWI0MDApO2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoNTksMTMwLDI0NiwuMTUpO30iCiAgKyIuY2xwdy13bWV0ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjlweDt9IgogICsiLmNscHctd3BpbGx7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxM3B4O2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjZweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO30iCiAgKyIuY2xwdy13cGlsbC5sb3d7Y29sb3I6dmFyKC0tbXV0ZWQpO30iCiAgKyIuY2xwdy13cGlsbC5nb29ke2NvbG9yOiMwNDc4NTc7YmFja2dyb3VuZDp2YXIoLS1ncmVlbjUwKTtib3JkZXItY29sb3I6I0E3RjNEMDt9IgogICsiLmNscHctd3BpbGwub3Zlcntjb2xvcjojQjQ1MzA5O2JhY2tncm91bmQ6dmFyKC0tYW1iZXI1MCk7Ym9yZGVyLWNvbG9yOiNGREU2OEE7fSIKICArIi5jbHB3LXdwaWxsLm1heHtjb2xvcjojQkUxMjNDO2JhY2tncm91bmQ6dmFyKC0tcm9zZTUwKTtib3JkZXItY29sb3I6I0ZFQ0REMzt9IgogICsiLmNscHctdG1ye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDttYXJnaW4tbGVmdDphdXRvO30iCiAgKyIuY2xwdy10bXItYnRue2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTIuNXB4O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6N3B4IDEycHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlLGJvcmRlci1jb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctdG1yLWJ0bjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7Y29sb3I6dmFyKC0tYjcwMCk7fSIKICArIi5jbHB3LXRtci1idG4ucnVue2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7fSIKICAvLyBzYW1wbGUgcGFuZWwKICArIi5jbHB3LXNhbXBsZXN7bWFyZ2luLXRvcDoxNHB4O2JvcmRlci10b3A6MXB4IGRhc2hlZCAjRDNEOUUwO3BhZGRpbmc6MTZweCAxOHB4IDIwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MCAwIDEwcHggMTBweDt9IgogICsiLmNscHctc2FtcGxlc1toaWRkZW5de2Rpc3BsYXk6bm9uZTt9IgogICsiLmNscHctc2Ftbm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLW11dGVkKTttYXJnaW4tYm90dG9tOjEycHg7fSIKICArIi5jbHB3LXRhYnN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToxMnB4O30iCiAgKyIuY2xwdy10YWJ7Ym9yZGVyOjFweCBzb2xpZCAjRDlERUU1O2JhY2tncm91bmQ6I0YxRjNGNjtjb2xvcjojNDc1NTY5O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxNnB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZSxjb2xvciAuMnMgZWFzZTt9IgogICsiLmNscHctdGFiLm9ue2JhY2tncm91bmQ6dmFyKC0tY3JpbXNvbik7Ym9yZGVyLWNvbG9yOnZhcigtLWNyaW1zb24pO2NvbG9yOiNmZmY7fSIKICArIi5jbHB3LXNhbWJvZHl7YmFja2dyb3VuZDojRjdGOEZBO2JvcmRlcjoxcHggc29saWQgI0U3RUFFRTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4IDE4cHg7fSIKICArIi5jbHB3LXNhbWx2bHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo4MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWNyaW1zb24pO21hcmdpbi1ib3R0b206OHB4O30iCiAgKyIuY2xwdy1zYW10ZXh0e2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxRjI5Mzc7bGluZS1oZWlnaHQ6MS43O3doaXRlLXNwYWNlOnByZS13cmFwO30iCiAgKyIuY2xwdy1zYW1oaW50e21hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOiM0NzU1Njk7YmFja2dyb3VuZDojRUVGMkZGO2JvcmRlcjoxcHggc29saWQgI0RCRTNGRjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjlweCAxMnB4O30iCiAgKyIuY2xwdy1zYW1oaW50IGJ7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICAvLyBydWJyaWMgLyBzY29yaW5nCiAgKyIuY2xwdy1wYW5lbHttYXJnaW4tdG9wOjE4cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoyMHB4IDIycHg7Ym94LXNoYWRvdzowIDEwcHggMzBweCAtMjBweCByZ2JhKDE1LDIzLDQyLC4yKTt9IgogICsiLmNscHctcGFuZWwgaDJ7Zm9udC1zaXplOjE5cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWI5MDApO21hcmdpbi1ib3R0b206NHB4O30iCiAgKyIuY2xwdy1wYW5lbCAuY2xwdy1sZWFke2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206MTRweDt9IgogICsiLmNscHctcnViZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEwcHg7fSIKICArIi5jbHB3LXJ1YntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTJweCAxNHB4O2JhY2tncm91bmQ6I0ZDRkRGRjtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZSxiYWNrZ3JvdW5kIC4ycyBlYXNlO30iCiAgKyIuY2xwdy1ydWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWI0MDApO30iCiAgKyIuY2xwdy1ydWIuZG9uZXtib3JkZXItY29sb3I6I0E3RjNEMDtiYWNrZ3JvdW5kOnZhcigtLWdyZWVuNTApO30iCiAgKyIuY2xwdy1ydWIgaW5wdXR7bWFyZ2luLXRvcDozcHg7YWNjZW50LWNvbG9yOnZhcigtLWdyZWVuKTtmbGV4Om5vbmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDt9IgogICsiLmNscHctcnViLWt7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICArIi5jbHB3LXJ1Yi1ke2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tdG9wOjJweDt9IgogICsiLmNscHctc2NvcmVib3h7bWFyZ2luLXRvcDoxNHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMzMzQxNTU7bGluZS1oZWlnaHQ6MS42O2JhY2tncm91bmQ6dmFyKC0tYjUwKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE0cHggMTZweDt9IgogICsiLmNscHctc2NvcmVib3ggYntjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctY2xicm93e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6MTJweDt9IgogICsiLmNscHctY2xidGFne2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iNzAwKTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1iMTAwKTtib3JkZXItcmFkaXVzOjMycHg7cGFkZGluZzo2cHggMTNweDt9IgogICsiLmNscHctZm9vdHttYXJnaW4tdG9wOjE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tc3VidGxlKTt0ZXh0LWFsaWduOmNlbnRlcjt9IgogICsiQG1lZGlhKG1heC13aWR0aDo4MjBweCl7LmNscHctc3BsaXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9LmNscHctcmVhZHtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRTNFNkVBO30uY2xwdy1ydWJncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7fS5jbHB3LWhlcm97cGFkZGluZzoyNnB4IDIycHg7fX0iCiAgOwoKICBmdW5jdGlvbiBpbmplY3RDU1MoKXsgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTdHlsZSIpKSByZXR1cm47CiAgICB2YXIgc3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsgc3QuaWQ9ImNscHdTdHlsZSI7IHN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKENTUykpOwogICAgKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc3QpOyB9CgogIC8vIC0tLS0tLS0tLS0gYnVpbGQgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIHRhc2tIVE1MKHQpewogICAgdmFyIGQ9V0RBVEEudGFza3NbdC0xXTsgdmFyIGg9IiI7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy10YXNrJysodD09PXN0YXRlLmFjdGl2ZT8nIG9uJzonJykrJyIgZGF0YS10YXNrPSInK3QrJyIgaWQ9ImNscHdUYXNrJyt0KyciPic7CiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctYmFyIj48c3BhbiBjbGFzcz0iY2xwdy1iYXItdCI+Jytlc2MoZC5iYXJUaXRsZSkrJzwvc3Bhbj4nCiAgICAgICArJzxzcGFuIGNsYXNzPSJjbHB3LWJhci10aW1lIiBpZD0iY2xwd0JhclRpbWUnK3QrJyI+VGltZSByZW1haW5pbmc6IDxiPicrZm10KHN0YXRlLnRpbWVyW3RdLnJlbSkrJzwvYj48L3NwYW4+JwogICAgICAgKyc8YnV0dG9uIGNsYXNzPSJjbHB3LXRtci1idG4iIGRhdGEtdG5leHQ9IicrdCsnIj4nKyh0PFdEQVRBLnRhc2tzLmxlbmd0aD8nTkVYVCc6J0RPTkUnKSsnPC9idXR0b24+PC9kaXY+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1zcGxpdCI+JzsKICAgIC8vIGxlZnQKICAgIGgrPSAgJzxkaXYgY2xhc3M9ImNscHctcmVhZCI+JzsKICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXJoZWFkIj48c3BhbiBjbGFzcz0iY2xwdy1pbmZvIj5pPC9zcGFuPjxwPicrZXNjKGQucmVhZEhlYWQpKyc8L3A+PC9kaXY+JzsKICAgIGlmKGQuc2NlbmFyaW9IZWFkKXsgaCs9JzxkaXYgY2xhc3M9ImNscHctc2NlbmFyaW8taCI+Jytlc2MoZC5zY2VuYXJpb0hlYWQpKyc8L2Rpdj4nOyB9CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1zY2VuYXJpbyI+Jytlc2MoZC5zY2VuYXJpbykrJzwvZGl2Pic7CiAgICBoKz0gICAnPGJ1dHRvbiBjbGFzcz0iY2xwdy1zYW10b2dnbGUiIGRhdGEtc2FtdG9nZ2xlPSInK3QrJyI+Q2xpY2sgaGVyZSB0byB2aWV3IHNhbXBsZSByZXNwb25zZXM8L2J1dHRvbj4nOwogICAgaCs9ICAnPC9kaXY+JzsKICAgIC8vIHJpZ2h0CiAgICBoKz0gICc8ZGl2IGNsYXNzPSJjbHB3LXdyaXRlIj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctcHJvbXB0cm93Ij48c3BhbiBjbGFzcz0iY2xwdy1pbmZvIj5pPC9zcGFuPjxwPicrZXNjKGQucHJvbXB0SGVhZCkrJzwvcD48L2Rpdj4nOwogICAgaWYoZC5idWxsZXRzICYmIGQuYnVsbGV0cy5sZW5ndGgpeyBoKz0nPHVsIGNsYXNzPSJjbHB3LWJ1bGxldHMiPic7IGQuYnVsbGV0cy5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBoKz0nPGxpPicrZXNjKGIpKyc8L2xpPic7IH0pOyBoKz0nPC91bD4nOyB9CiAgICBpZihkLm9wdGlvbnMpeyBoKz0nPGRpdiBjbGFzcz0iY2xwdy1vcHRzIj4nOyBkLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihvKXsKICAgICAgICBoKz0nPGxhYmVsIGNsYXNzPSJjbHB3LW9wdCcrKHN0YXRlLm9wdD09PW8ua2V5Pycgc2VsJzonJykrJyIgZGF0YS1vcHR3cmFwPSInK28ua2V5KyciPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iY2xwd09wdCIgdmFsdWU9Iicrby5rZXkrJyInKyhzdGF0ZS5vcHQ9PT1vLmtleT8nIGNoZWNrZWQnOicnKSsnPjxzcGFuPicrZXNjKG8ubGFiZWwpKyc8L3NwYW4+PC9sYWJlbD4nOyB9KTsKICAgICAgICBoKz0nPC9kaXY+JzsgfQogICAgaCs9ICAgJzx0ZXh0YXJlYSBjbGFzcz0iY2xwdy10YSIgaWQ9ImNscHdUYScrdCsnIiBkYXRhLXRhPSInK3QrJyIgcGxhY2Vob2xkZXI9IlR5cGUgeW91ciByZXNwb25zZSBoZXJlLi4uIj4nK2VzYyhzdGF0ZS50ZXh0W3RdKSsnPC90ZXh0YXJlYT4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctd21ldGVyIj4nOwogICAgaCs9ICAgICAnPHNwYW4gY2xhc3M9ImNscHctd3BpbGwiIGlkPSJjbHB3V3BpbGwnK3QrJyI+MCB3b3Jkczwvc3Bhbj4nOwogICAgaCs9ICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzY0NzQ4QjsiPmFpbSAnK2VzYyhkLndvcmRBaW0pKyc8L3NwYW4+JzsKICAgIGgrPSAgICAgJzxzcGFuIGNsYXNzPSJjbHB3LXRtciI+JwogICAgICAgICAgICAgKyc8YnV0dG9uIGNsYXNzPSJjbHB3LXRtci1idG4iIGRhdGEtdHN0YXJ0PSInK3QrJyI+U3RhcnQgdGltZXI8L2J1dHRvbj4nCiAgICAgICAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10cmVzZXQ9IicrdCsnIj5SZXNldDwvYnV0dG9uPjwvc3Bhbj4nOwogICAgaCs9ICAgJzwvZGl2Pic7CiAgICBoKz0gICc8L2Rpdj4nOwogICAgaCs9ICc8L2Rpdj4nOyAvLyBzcGxpdAogICAgLy8gc2FtcGxlcwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LXNhbXBsZXMiIGlkPSJjbHB3U2FtJyt0KyciIGhpZGRlbj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctc2Ftbm90ZSI+JysoZC5zYW1Ob3RlP2Quc2FtTm90ZTonVGhlc2UgYXJlIHRoZSBvZmZpY2lhbCBwcmFjdGljZSBzYW1wbGUgcmVzcG9uc2VzIGF0IHRocmVlIHNjb3JlIGxldmVscy4gTG93ZXItbGV2ZWwgc2FtcGxlcyBrZWVwIHRoZWlyIG9yaWdpbmFsIG1pc3Rha2VzIG9uIHB1cnBvc2UgJm1kYXNoOyBzdHVkeSB3aGF0IGNoYW5nZXMgYXMgdGhlIHNjb3JlIHJpc2VzLicpKyc8L2Rpdj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctdGFicyIgaWQ9ImNscHdUYWJzJyt0KyciPic7CiAgICBkLnNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzLGkpeyBoKz0nPGJ1dHRvbiBjbGFzcz0iY2xwdy10YWInKyhpPT09MD8nIG9uJzonJykrJyIgZGF0YS10YWI9IicrdCsnIiBkYXRhLWk9IicraSsnIj4nK2VzYyhzLmxldmVsKSsnPC9idXR0b24+JzsgfSk7CiAgICBoKz0gICAnPC9kaXY+JzsKICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXNhbWJvZHkiIGlkPSJjbHB3U2FtQm9keScrdCsnIj48L2Rpdj4nOwogICAgaCs9ICc8L2Rpdj4nOwogICAgaCs9JzwvZGl2Pic7CiAgICByZXR1cm4gaDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlcigpewogICAgdmFyIHJvb3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdBcHAiKTsgaWYoIXJvb3QpIHJldHVybjsKICAgIHZhciBtPVdEQVRBLm1ldGEsIGg9IiI7CiAgICAvLyBoZXJvCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctaGVybyI+PGRpdiBjbGFzcz0iY2xwdy1hdXJvcmEiPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctaGJhZGdlcyI+PHNwYW4gY2xhc3M9ImNscHctYmJyYW5kIj4nK2VzYyhtLmJyYW5kKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWJzZXQiPicrZXNjKG0uc2V0KSsnPC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxoMT4nK2VzYyhtLnRpdGxlKSsnPC9oMT4nOwogICAgaCs9ICc8cCBjbGFzcz0iY2xwdy1oZXJvLXN1YiI+V3JpdGUgeW91ciByZXNwb25zZSwgdGltZSB5b3Vyc2VsZiwgdGhlbiBjb21wYXJlIGl0IHdpdGggb2ZmaWNpYWwgc2FtcGxlIGFuc3dlcnMgYXQgdGhyZWUgc2NvcmUgbGV2ZWxzICZtZGFzaDsgQ0VMUElQIDQmbmRhc2g7NSwgNyZuZGFzaDs4IGFuZCAxMCZuZGFzaDsxMi48L3A+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1oY2hpcHMiPjxzcGFuIGNsYXNzPSJjbHB3LWNoaXAiPjIgdGFza3M8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+ficrbS50b3RhbE1pbisnIG1pbnV0ZXM8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+MTUwJm5kYXNoOzIwMCB3b3JkcyBlYWNoPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNoaXAiPlNhbXBsZSBhbnN3ZXJzIGluY2x1ZGVkPC9zcGFuPjwvZGl2Pic7CiAgICBoKz0gJzxidXR0b24gY2xhc3M9ImNscHctY3RhIiBpZD0iY2xwd1N0YXJ0Ij5TdGFydCB3cml0aW5nPC9idXR0b24+JzsKICAgIGgrPSc8L3NlY3Rpb24+JzsKICAgIC8vIHRvb2xiYXIKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXRvb2xzIj48c3BhbiBjbGFzcz0iY2xwdy13Y291bnQiIGlkPSJjbHB3VG90V29yZHMiPldvcmRzICZtZGFzaDsgVGFzayAxOiAwICZtaWRkb3Q7IFRhc2sgMjogMDwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1zYXZlZCIgaWQ9ImNscHdTYXZlZCI+RHJhZnQgc2F2ZWQgJiMxMDAwMzs8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctc3BhY2VyIj48L3NwYW4+PGJ1dHRvbiBjbGFzcz0iY2xwdy10YnRuIiBpZD0iY2xwd1Jlc2V0QWxsIj5SZXNldCBhbGw8L2J1dHRvbj48L2Rpdj4nOwogICAgLy8gc2ltCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctc2ltIj48ZGl2IGNsYXNzPSJjbHB3LWRvdHMiIGlkPSJjbHB3RG90cyI+JzsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IGgrPSc8YnV0dG9uIGNsYXNzPSJjbHB3LWRvdCIgZGF0YS1kb3Q9IicrZC5pZCsnIj5UYXNrICcrZC5pZCsnICZtaWRkb3Q7ICcrZXNjKGQubmFtZSkrJzwvYnV0dG9uPic7IH0pOwogICAgaCs9JzwvZGl2PjxkaXYgY2xhc3M9ImNscHctY2F0IiBpZD0iY2xwd0NhdCI+JzsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IGgrPXRhc2tIVE1MKGQuaWQpOyB9KTsKICAgIGgrPSc8L2Rpdj48L3NlY3Rpb24+JzsKICAgIC8vIHJ1YnJpYyBwYW5lbAogICAgaCs9JzxzZWN0aW9uIGNsYXNzPSJjbHB3LXBhbmVsIj48aDI+U2NvcmUgeW91ciBvd24gd3JpdGluZzwvaDI+PHAgY2xhc3M9ImNscHctbGVhZCI+VGhlcmUgaXMgbm8gYW5zd2VyIGtleSBmb3IgV3JpdGluZy4gUmF0ZSBlYWNoIHJlc3BvbnNlIGFnYWluc3QgdGhlIGZvdXIgb2ZmaWNpYWwgQ0VMUElQIGRpbWVuc2lvbnMuPC9wPic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1ydWJncmlkIiBpZD0iY2xwd1J1YkdyaWQiPjwvZGl2Pic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1zY29yZWJveCI+Jytlc2MoV0RBVEEuc2NvcmluZ05vdGUpKyc8ZGl2IGNsYXNzPSJjbHB3LWNsYnJvdyI+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5NPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNsYnRhZyI+Q0xCIDQmbmRhc2g7NSAmcmFycjsgZGV2ZWxvcGluZzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPkNMQiA3Jm5kYXNoOzggJnJhcnI7IGFkZXF1YXRlJm5kYXNoO2dvb2Q8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5DTEIgOSZuZGFzaDsxMiAmcmFycjsgc3Ryb25nPC9zcGFuPjwvZGl2PjwvZGl2Pic7CiAgICBoKz0nPC9zZWN0aW9uPic7CiAgICBoKz0nPGRpdiBjbGFzcz0iY2xwdy1mb290Ij5BbGxFbmdsaXNoNFUgJm1pZGRvdDsgQ0VMUElQIFdyaXRpbmcgUHJhY3RpY2UgJm1pZGRvdDsgJytlc2MoV0RBVEEubWV0YS5zZXQpKyc8L2Rpdj4nOwogICAgcm9vdC5pbm5lckhUTUw9aDsKICAgIGJ1aWxkUnVicmljKCk7CiAgICBXREFUQS50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKGQpeyByZW5kZXJTYW1wbGUoZC5pZCk7IHVwZGF0ZVdDKGQuaWQpOyB9KTsKICAgIHdpcmVFdmVudHMoKTsKICAgIHJlZnJlc2hEb3RzKCk7CiAgICB1cGRhdGVUb3RhbHMoKTsKICB9CgogIGZ1bmN0aW9uIGJ1aWxkUnVicmljKCl7CiAgICB2YXIgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1J1YkdyaWQiKTsgaWYoIWcpIHJldHVybjsgdmFyIGg9IiI7CiAgICBXREFUQS5ydWJyaWMuZm9yRWFjaChmdW5jdGlvbihyLGkpewogICAgICB2YXIgb24gPSBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXSAmJiBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXVtpXTsKICAgICAgaCs9JzxsYWJlbCBjbGFzcz0iY2xwdy1ydWInKyhvbj8nIGRvbmUnOicnKSsnIiBkYXRhLXJ1YndyYXA9IicraSsnIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRhdGEtcnViPSInK2krJyInKyhvbj8nIGNoZWNrZWQnOicnKSsnPjxzcGFuPjxzcGFuIGNsYXNzPSJjbHB3LXJ1Yi1rIj4nK2VzYyhyLmspKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctcnViLWQiPicrZXNjKHIuZCkrJzwvc3Bhbj48L3NwYW4+PC9sYWJlbD4nOwogICAgfSk7CiAgICBnLmlubmVySFRNTD1oOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU2FtcGxlKHQpewogICAgdmFyIGQ9V0RBVEEudGFza3NbdC0xXSwgaT1zdGF0ZS50YWJbdF0sIHM9ZC5zYW1wbGVzW2ldOwogICAgdmFyIGJvZHk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYW1Cb2R5Iit0KTsgaWYoIWJvZHkpIHJldHVybjsKICAgIGJvZHkuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJjbHB3LXNhbWx2bCI+Jytlc2Mocy5sZXZlbCkrJzwvZGl2PjxkaXYgY2xhc3M9ImNscHctc2FtdGV4dCI+Jytlc2Mocy50ZXh0KSsnPC9kaXY+JwogICAgICArJzxkaXYgY2xhc3M9ImNscHctc2FtaGludCI+PGI+V2hhdCBzZXRzIHRoaXMgbGV2ZWwgYXBhcnQ6PC9iPiAnK2VzYyhzLm5vdGUpKyc8L2Rpdj4nOwogICAgdmFyIHRhYnM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUYWJzIit0KTsgaWYodGFicyl7IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGFicy5jaGlsZHJlbixmdW5jdGlvbihiLGJpKXsgYi5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsYmk9PT1pKTsgfSk7IH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVdDKHQpewogICAgdmFyIG49d2Moc3RhdGUudGV4dFt0XSk7IHZhciBwaWxsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3V3BpbGwiK3QpOyBpZighcGlsbCkgcmV0dXJuOwogICAgcGlsbC50ZXh0Q29udGVudD1uKyhuPT09MT8iIHdvcmQiOiIgd29yZHMiKTsKICAgIHBpbGwuY2xhc3NOYW1lPSJjbHB3LXdwaWxsICIrKG48MTUwPyJsb3ciOihuPD0yMDA\/Imdvb2QiOihuPD0yNTA\/Im92ZXIiOiJtYXgiKSkpOwogICAgdXBkYXRlVG90YWxzKCk7CiAgfQogIGZ1bmN0aW9uIHVwZGF0ZVRvdGFscygpewogICAgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3VG90V29yZHMiKTsgaWYoZWwpIGVsLmlubmVySFRNTD0iV29yZHMgJm1kYXNoOyBUYXNrIDE6ICIrd2Moc3RhdGUudGV4dFsxXSkrIiAmbWlkZG90OyBUYXNrIDI6ICIrd2Moc3RhdGUudGV4dFsyXSk7CiAgfQoKICBmdW5jdGlvbiByZWZyZXNoRG90cygpewogICAgdmFyIGRvdHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdEb3RzIik7IGlmKCFkb3RzKSByZXR1cm47CiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRvdHMuY2hpbGRyZW4sZnVuY3Rpb24oYil7IHZhciBpZD0rYi5nZXRBdHRyaWJ1dGUoImRhdGEtZG90Iik7CiAgICAgIGIuY2xhc3NMaXN0LnRvZ2dsZSgib24iLGlkPT09c3RhdGUuYWN0aXZlKTsKICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCJmaWxsZWQiLCBpZCE9PXN0YXRlLmFjdGl2ZSAmJiB3YyhzdGF0ZS50ZXh0W2lkXSk+MCk7IH0pOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3VGFzayIrZC5pZCk7IGlmKGVsKSBlbC5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsZC5pZD09PXN0YXRlLmFjdGl2ZSk7IH0pOwogIH0KCiAgZnVuY3Rpb24gc3dpdGNoVGFzayh0KXsgc3RhdGUuYWN0aXZlPXQ7IHJlZnJlc2hEb3RzKCk7IGJ1aWxkUnVicmljKCk7CiAgICB2YXIgY2F0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3Q2F0Iik7IGlmKGNhdCYmY2F0LnNjcm9sbEludG9WaWV3KSBjYXQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJzdGFydCJ9KTsgfQoKICAvLyB0aW1lcnMKICBmdW5jdGlvbiB0aWNrKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgaWYoVC5yZW08PTApeyBzdG9wVGltZXIodCk7IHJldHVybjsgfSBULnJlbS0tOyBwYWludFRpbWUodCk7IGlmKFQucmVtPD0wKSBzdG9wVGltZXIodCk7IH0KICBmdW5jdGlvbiBwYWludFRpbWUodCl7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0JhclRpbWUiK3QpOyB2YXIgVD1zdGF0ZS50aW1lclt0XTsKICAgIGlmKGVsKXsgZWwuaW5uZXJIVE1MPSJUaW1lIHJlbWFpbmluZzogPGI+IitmbXQoVC5yZW0pKyI8L2I+IjsgZWwuY2xhc3NMaXN0LnRvZ2dsZSgibG93IixULnJlbTw9MTIwKTsgfQogICAgdmFyIGJ0bj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10c3RhcnQ9IicrdCsnIl0nKTsgaWYoYnRuKXsgYnRuLnRleHRDb250ZW50PVQucnVuPyJQYXVzZSB0aW1lciI6KFQucmVtPD0wPyJUaW1lIHVwIjoiU3RhcnQgdGltZXIiKTsgYnRuLmNsYXNzTGlzdC50b2dnbGUoInJ1biIsVC5ydW4pOyB9IH0KICBmdW5jdGlvbiBzdGFydFRpbWVyKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgaWYoVC5yZW08PTApIHJldHVybjsgVC5ydW49dHJ1ZTsgaWYoVC5pdikgY2xlYXJJbnRlcnZhbChULml2KTsgVC5pdj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RpY2sodCk7fSwxMDAwKTsgcGFpbnRUaW1lKHQpOyB9CiAgZnVuY3Rpb24gc3RvcFRpbWVyKHQpeyB2YXIgVD1zdGF0ZS50aW1lclt0XTsgVC5ydW49ZmFsc2U7IGlmKFQuaXYpeyBjbGVhckludGVydmFsKFQuaXYpOyBULml2PW51bGw7IH0gcGFpbnRUaW1lKHQpOyB9CiAgZnVuY3Rpb24gdG9nZ2xlVGltZXIodCl7IHN0YXRlLnRpbWVyW3RdLnJ1bj9zdG9wVGltZXIodCk6c3RhcnRUaW1lcih0KTsgfQogIGZ1bmN0aW9uIHJlc2V0VGltZXIodCl7IHN0b3BUaW1lcih0KTsgc3RhdGUudGltZXJbdF0ucmVtPVdEQVRBLnRhc2tzW3QtMV0ubWludXRlcyo2MDsgcGFpbnRUaW1lKHQpOyB9CgogIC8vIC0tLS0tLS0tLS0gZXZlbnRzIC0tLS0tLS0tLS0KICBmdW5jdGlvbiB3aXJlRXZlbnRzKCl7CiAgICB2YXIgcm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0FwcCIpOwogICAgdmFyIHN0YXJ0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3U3RhcnQiKTsKICAgIGlmKHN0YXJ0KSBzdGFydC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsgc3dpdGNoVGFzaygxKTsgc3RhcnRUaW1lcigxKTsgfSk7CiAgICB2YXIgcmVzZXRBbGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdSZXNldEFsbCIpOwogICAgaWYocmVzZXRBbGwpIHJlc2V0QWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpewogICAgICBpZighY29uZmlybSgiQ2xlYXIgYm90aCBkcmFmdHMsIHNlbGVjdGVkIG9wdGlvbiBhbmQgdGltZXJzIG9uIHRoaXMgZGV2aWNlPyIpKSByZXR1cm47CiAgICAgIHN0YXRlLnRleHRbMV09IiI7c3RhdGUudGV4dFsyXT0iIjtzdGF0ZS5vcHQ9bnVsbDtzdGF0ZS5ydWJyaWM9ezE6e30sMjp7fX07CiAgICAgIHJlc2V0VGltZXIoMSk7cmVzZXRUaW1lcigyKTsgc2F2ZSgpOyByZW5kZXIoKTsgfSk7CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7CiAgICAgIHZhciBlbD1lLnRhcmdldC5jbG9zZXN0KCJbZGF0YS1kb3RdLFtkYXRhLXNhbXRvZ2dsZV0sW2RhdGEtdGFiXSxbZGF0YS10c3RhcnRdLFtkYXRhLXRyZXNldF0sW2RhdGEtdG5leHRdIik7IGlmKCFlbCkgcmV0dXJuOwogICAgICBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtZG90IikpeyBzd2l0Y2hUYXNrKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtZG90IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXNhbXRvZ2dsZSIpKXsgdmFyIHQ9K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS1zYW10b2dnbGUiKTsgdmFyIHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTYW0iK3QpOwogICAgICAgIGlmKHApeyBwLmhpZGRlbj0hcC5oaWRkZW47IGVsLnRleHRDb250ZW50PXAuaGlkZGVuPyJDbGljayBoZXJlIHRvIHZpZXcgc2FtcGxlIHJlc3BvbnNlcyI6IkhpZGUgc2FtcGxlIHJlc3BvbnNlcyI7IGlmKCFwLmhpZGRlbikgcmVuZGVyU2FtcGxlKHQpOyB9IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiIikpeyB2YXIgdHQ9K2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10YWIiKTsgc3RhdGUudGFiW3R0XT0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKTsgcmVuZGVyU2FtcGxlKHR0KTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10c3RhcnQiKSl7IHRvZ2dsZVRpbWVyKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdHN0YXJ0IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRyZXNldCIpKXsgcmVzZXRUaW1lcigrZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRyZXNldCIpKTsgfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10bmV4dCIpKXsgdmFyIGN1cj0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRuZXh0Iik7IGlmKGN1cjxXREFUQS50YXNrcy5sZW5ndGgpeyBzd2l0Y2hUYXNrKGN1cisxKTsgfSB9CiAgICB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixmdW5jdGlvbihlKXsgdmFyIHRhPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXRhXSIpOyBpZighdGEpIHJldHVybjsKICAgICAgdmFyIHQ9K3RhLmdldEF0dHJpYnV0ZSgiZGF0YS10YSIpOyBzdGF0ZS50ZXh0W3RdPXRhLnZhbHVlOyB1cGRhdGVXQyh0KTsgcmVmcmVzaERvdHMoKTsgc2F2ZSgpOyB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZnVuY3Rpb24oZSl7CiAgICAgIHZhciBvcHQ9ZS50YXJnZXQuY2xvc2VzdCgnaW5wdXRbbmFtZT0iY2xwd09wdCJdJyk7CiAgICAgIGlmKG9wdCl7IHN0YXRlLm9wdD1vcHQudmFsdWU7IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3B0d3JhcF0iKSxmdW5jdGlvbihsKXsgbC5jbGFzc0xpc3QudG9nZ2xlKCJzZWwiLGwuZ2V0QXR0cmlidXRlKCJkYXRhLW9wdHdyYXAiKT09PXN0YXRlLm9wdCk7IH0pOyBzYXZlKCk7IHJldHVybjsgfQogICAgICB2YXIgcnViPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLXJ1Yl0iKTsKICAgICAgaWYocnViKXsgdmFyIGk9K3J1Yi5nZXRBdHRyaWJ1dGUoImRhdGEtcnViIik7IGlmKCFzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXSkgc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV09e307IHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdW2ldPXJ1Yi5jaGVja2VkOwogICAgICAgIHZhciB3cmFwPXJ1Yi5jbG9zZXN0KCJbZGF0YS1ydWJ3cmFwXSIpOyBpZih3cmFwKSB3cmFwLmNsYXNzTGlzdC50b2dnbGUoImRvbmUiLHJ1Yi5jaGVja2VkKTsgc2F2ZSgpOyB9CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJvb3QoKXsgbG9hZCgpOyBpbmplY3RDU1MoKTsgcmVuZGVyKCk7IH0KICBpZihkb2N1bWVudC5yZWFkeVN0YXRlPT09ImxvYWRpbmciKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixib290KTsgZWxzZSBib290KCk7Cn0pKCk7Cgo=\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Writing Set 8 Practice Test 1: Task 1 (email) and Task 2 (survey response) with timers and word counter, plus a self-assessment guide. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6395","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6395"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6395\/revisions"}],"predecessor-version":[{"id":6566,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6395\/revisions\/6566"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}