{"id":6317,"date":"2026-07-10T13:12:06","date_gmt":"2026-07-10T13:12:06","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-3-test-2-writing\/"},"modified":"2026-07-12T03:24:51","modified_gmt":"2026-07-12T03:24:51","slug":"celpip-set-3-test-2-writing","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-3-test-2-writing\/","title":{"rendered":"CELPIP Writing \u2014 Set 3 \u00b7 Practice Test 2"},"content":{"rendered":"<div class=\"clpw-wrap\" id=\"clpwApp\"><\/div>\n<p><script>eval(atob(\"dmFyIFdEQVRBPXsibWV0YSI6eyJicmFuZCI6IkNFTFBJUCIsInNldCI6IlNldCAzIFx1MDBiNyBQcmFjdGljZSBUZXN0IDIiLCJ0aXRsZSI6IkNFTFBJUCBXcml0aW5nIFByYWN0aWNlIFRlc3QiLCJ0b3RhbE1pbiI6NTN9LCJ0YXNrcyI6W3siaWQiOjEsImJhclRpdGxlIjoiUHJhY3RpY2UgVGVzdCAyIFx1MjAxMyBXcml0aW5nIFRhc2sgMTogV3JpdGluZyBhbiBFbWFpbCIsIm5hbWUiOiJXcml0aW5nIGFuIEVtYWlsIiwibWludXRlcyI6MjcsIndvcmRBaW0iOiIxNTBcdTIwMTMyMDAgd29yZHMiLCJyZWFkSGVhZCI6IlJlYWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4iLCJzY2VuYXJpbyI6IllvdSBoYXZlIGJvcnJvd2VkIG1vbmV5IGZyb20geW91ciBiYW5rLiBZb3UgYWdyZWVkIHRvIHJlcGF5IGEgZml4ZWQgYW1vdW50IGV2ZXJ5IG1vbnRoLiBIb3dldmVyLCBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBwYXkgYW55IG1vbmV5IGJhY2sgdGhpcyBtb250aC4iLCJwcm9tcHRIZWFkIjoiV3JpdGUgYW4gZW1haWwgdG8gdGhlIGJhbmsgaW4gYWJvdXQgMTUwXHUyMDEzMjAwIHdvcmRzLiBZb3VyIGVtYWlsIHNob3VsZCBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczoiLCJidWxsZXRzIjpbIlN0YXRlIHRoZSBhbW91bnQgb2YgbW9uZXkgeW91IGJvcnJvd2VkIGFuZCB0aGUgcmVwYXltZW50IHNjaGVkdWxlLiIsIkV4cGxhaW4gd2h5IHlvdSBib3Jyb3dlZCB0aGUgbW9uZXkuIiwiRXhwbGFpbiB0aGUgcmVhc29uIHlvdSBjYW5ub3QgcGF5IGFueSBtb25leSB0aGlzIG1vbnRoIGFuZCB3aHkgeW91IHdpbGwgYmUgYWJsZSB0byBwYXkgbmV4dCBtb250aC4iXSwib3B0aW9ucyI6bnVsbCwic2FtTm90ZSI6IlRoZXNlIGFyZSBBbGxFbmdsaXNoNFUgbW9kZWwgYW5zd2VycyB3cml0dGVuIGZvciB0aGlzIGV4YWN0IFRhc2sgMSBlbWFpbCBwcm9tcHQgKGV4cGxhaW5pbmcgYSByZXBheW1lbnQgcHJvYmxlbSB0byB5b3VyIGJhbmspLCBzaG93biBhdCB0aHJlZSBzY29yZSBsZXZlbHMgKENFTFBJUCA0XHUyMDEzNSwgN1x1MjAxMzggYW5kIDEwXHUyMDEzMTIpIHNvIHlvdSBjYW4gc2VlIGhvdyB0aGUgc2FtZSB0YXNrIHJlYWRzIGFzIGl0IGltcHJvdmVzLiBUaGV5IGFyZSBBRTRVIHN0dWR5IG1vZGVscywgbm90IG9mZmljaWFsIENFTFBJUCBzYW1wbGVzOyB0aGUgNFx1MjAxMzUgbW9kZWwgZGVsaWJlcmF0ZWx5IGtlZXBzIHNvbWUgZXJyb3JzLiIsInNhbXBsZXMiOlt7ImxldmVsIjoiQ0VMUElQIDRcdTIwMTM1IFJlc3BvbnNlIiwibm90ZSI6IkNvdmVycyB0aGUgdGhyZWUgcG9pbnRzIGJ1dCB3aXRoIHNpbXBsZSB2b2NhYnVsYXJ5LCBzaG9ydCBzZW50ZW5jZXMgYW5kIHNldmVyYWwgZ3JhbW1hciBzbGlwcyB0eXBpY2FsIG9mIGEgZGV2ZWxvcGluZyB3cml0ZXIuIiwidGV4dCI6IkRlYXIgQmFuayBNYW5hZ2VyLFxuXG5JIGFtIHdyaXRpbmcgYWJvdXQgbXkgbG9hbi4gTGFzdCB5ZWFyIEkgYm9ycm93ICQ2LDAwMCBmcm9tIHlvdXIgYmFuay4gSSBhZ3JlZSB0byBwYXkgYmFjayAkMzAwIGV2ZXJ5IG1vbnRoIGZvciB0d28geWVhcnMuIFVudGlsIG5vdyBJIG5ldmVyIG1pc3MgYSBwYXltZW50LlxuXG5JIHRha2UgdGhpcyBsb2FuIGJlY2F1c2UgbXkgb2xkIGNhciBicm9rZSBkb3duIGFuZCBJIG5lZWQgYSBjYXIgdG8gZ28gdG8gbXkgd29yay4gV2l0aG91dCBjYXIgSSBjYW5ub3QgZ28gdG8gb2ZmaWNlLCBzbyBJIGhhdmUgbm8gY2hvaWNlLlxuXG5UaGlzIG1vbnRoIEkgaGF2ZSBhIGJpZyBwcm9ibGVtLiBNeSBjb21wYW55IGdpdmUgbWUgbXkgc2FsYXJ5IGxhdGUgYmVjYXVzZSBvZiBzb21lIGlzc3VlLCBhbmQgYWxzbyBJIG11c3QgcGF5IGEgaG9zcGl0YWwgYmlsbCBmb3IgbXkgbW90aGVyIHdobyB3YXMgc2ljay4gU28gSSBkb24ndCBoYXZlIG1vbmV5IHRvIHBheSB0aGUgbG9hbiB0aGlzIG1vbnRoLiBJIGFtIHZlcnkgc29ycnkgZm9yIHRoaXMuXG5cbk5leHQgbW9udGggZXZlcnl0aGluZyB3aWxsIGJlIG9rYXkuIE15IHNhbGFyeSB3aWxsIGNvbWUgbm9ybWFsIGFuZCBteSBtb3RoZXIgaXMgYmV0dGVyIG5vdy4gU28gSSBjYW4gcGF5IHRoaXMgbW9udGggYW5kIG5leHQgbW9udGggdG9nZXRoZXIuIFBsZWFzZSBnaXZlIG1lIG9uZSBtb3JlIG1vbnRoLiBUaGFuayB5b3UgZm9yIHVuZGVyc3RhbmQuXG5cblNpbmNlcmVseSxcbkRhdmlkIE5ndXllbiJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiQSBjbGVhciwgd2VsbC1vcmdhbmlzZWQgZW1haWwgdGhhdCBhbnN3ZXJzIGV2ZXJ5IHBvaW50IHdpdGggcmVhc29uczsgc29saWQgdm9jYWJ1bGFyeSBhbmQgb25seSBtaW5vciBlcnJvcnMuIiwidGV4dCI6IkRlYXIgU2lyIG9yIE1hZGFtLFxuXG5JIGFtIHdyaXRpbmcgcmVnYXJkaW5nIHRoZSBwZXJzb25hbCBsb2FuIEkgaGF2ZSB3aXRoIHlvdXIgYmFuay4gTGFzdCBzcHJpbmcgSSBib3Jyb3dlZCAkNiwwMDAgYW5kIGFncmVlZCB0byByZXBheSBpdCBpbiBmaXhlZCBtb250aGx5IGluc3RhbG1lbnRzIG9mICQzMDAgb3ZlciB0d28geWVhcnMuIFNvIGZhciBJIGhhdmUgbWFkZSBldmVyeSBwYXltZW50IG9uIHRpbWUuXG5cbkkgdG9vayBvdXQgdGhlIGxvYW4gYmVjYXVzZSBteSBjYXIsIHdoaWNoIEkgcmVseSBvbiB0byBjb21tdXRlIHRvIHdvcmssIGJyb2tlIGRvd24gYW5kIG5lZWRlZCB0byBiZSByZXBsYWNlZC4gQnV5aW5nIGEgcmVsaWFibGUgdXNlZCBjYXIgd2FzIHRoZSBvbmx5IHdheSBJIGNvdWxkIGtlZXAgbXkgam9iLlxuXG5VbmZvcnR1bmF0ZWx5LCBJIHdpbGwgbm90IGJlIGFibGUgdG8gbWFrZSBhIHBheW1lbnQgdGhpcyBtb250aC4gTXkgZW1wbG95ZXIgaGFzIGRlbGF5ZWQgb3VyIHNhbGFyaWVzIGJ5IHNldmVyYWwgd2Vla3MgZHVlIHRvIGEgc3lzdGVtIHByb2JsZW0sIGFuZCBhdCB0aGUgc2FtZSB0aW1lIEkgaGFkIHRvIGNvdmVyIGFuIHVuZXhwZWN0ZWQgbWVkaWNhbCBiaWxsIGZvciBhIGZhbWlseSBtZW1iZXIuIEFzIGEgcmVzdWx0LCBJIHNpbXBseSBkbyBub3QgaGF2ZSB0aGUgZnVuZHMgYXZhaWxhYmxlIHJpZ2h0IG5vdy5cblxuSSBhbSBjb25maWRlbnQgSSBjYW4gcGF5IG5leHQgbW9udGgsIGJlY2F1c2UgbXkgc2FsYXJ5IHdpbGwgcmV0dXJuIHRvIG5vcm1hbCBhbmQgdGhlIG1lZGljYWwgY29zdHMgYXJlIGJlaGluZCBtZS4gSSB3b3VsZCBiZSBncmF0ZWZ1bCBpZiB5b3UgY291bGQgYWxsb3cgbWUgdG8gY29tYmluZSB0aGlzIG1vbnRoJ3MgcGF5bWVudCB3aXRoIG5leHQgbW9udGgncy5cblxuVGhhbmsgeW91IGZvciB5b3VyIHVuZGVyc3RhbmRpbmcuXG5cblNpbmNlcmVseSxcbkRhdmlkIFRyYW4ifSx7ImxldmVsIjoiQ0VMUElQIDEwXHUyMDEzMTIgUmVzcG9uc2UiLCJub3RlIjoiRmx1ZW50LCBwcmVjaXNlIGFuZCBwcm9mZXNzaW9uYWwsIHdpdGggZXhhY3QgZmlndXJlcywgc21vb3RoIHRyYW5zaXRpb25zIGFuZCBhIGNvbmZpZGVudCwgcG9saXRlIHRvbmUuIiwidGV4dCI6IkRlYXIgTG9hbiBTZXJ2aWNlcyBUZWFtLFxuXG5JIGFtIHdyaXRpbmcgdG8gZXhwbGFpbiBhIHRlbXBvcmFyeSBkaWZmaWN1bHR5IHdpdGggdGhlIHBlcnNvbmFsIGxvYW4gSSBob2xkIHdpdGggeW91ciBiYW5rLiBJbiBBcHJpbCBvZiBsYXN0IHllYXIgSSBib3Jyb3dlZCAkNiwwMDAsIHdoaWNoIEkgYWdyZWVkIHRvIHJlcGF5IGluIGZpeGVkIG1vbnRobHkgaW5zdGFsbWVudHMgb2YgJDMwMCBvdmVyIGEgdHdlbnR5LWZvdXItbW9udGggdGVybSwgYW5kIEkgYW0gcGxlYXNlZCB0byBzYXkgdGhhdCBldmVyeSBwYXltZW50IHRvIGRhdGUgaGFzIGJlZW4gbWFkZSBvbiBzY2hlZHVsZS5cblxuVGhlIGxvYW4gYWxsb3dlZCBtZSB0byByZXBsYWNlIG15IGNhciBhZnRlciBpdCBicm9rZSBkb3duIGJleW9uZCByZXBhaXI7IGFzIEkgZGVwZW5kIG9uIGl0IHRvIGNvbW11dGUgdG8gd29yaywgYSByZWxpYWJsZSB2ZWhpY2xlIHdhcyBlc3NlbnRpYWwgdG8gcHJvdGVjdGluZyBteSBpbmNvbWUuXG5cblJlZ3JldHRhYmx5LCBJIGFtIHVuYWJsZSB0byBtYWtlIGEgcGF5bWVudCB0aGlzIG1vbnRoLiBNeSBlbXBsb3llciBoYXMgcG9zdHBvbmVkIHN0YWZmIHNhbGFyaWVzIGJ5IHRocmVlIHdlZWtzIGZvbGxvd2luZyBhIHBheXJvbGwtc3lzdGVtIGZhaWx1cmUsIGFuZCB0aGlzIGNvaW5jaWRlZCB3aXRoIGFuIHVyZ2VudCBtZWRpY2FsIGV4cGVuc2UgZm9yIG15IG1vdGhlci4gVG9nZXRoZXIgdGhlc2UgaGF2ZSBsZWZ0IG1lIHRlbXBvcmFyaWx5IHNob3J0IG9mIGZ1bmRzLlxuXG5JIGFtIGNvbmZpZGVudCB0aGlzIGlzIGEgb25lLW9mZiBzZXRiYWNrLiBNeSBzYWxhcnkgd2lsbCByZXN1bWUgYXMgbm9ybWFsIG5leHQgbW9udGggYW5kIHRoZSBtZWRpY2FsIGNvc3RzIGhhdmUgbm93IGJlZW4gc2V0dGxlZCwgc28gSSB3b3VsZCBiZSBhYmxlIHRvIHBheSBib3RoIGluc3RhbG1lbnRzIHRvZ2V0aGVyLiBJIHdvdWxkIHNpbmNlcmVseSBhcHByZWNpYXRlIGEgb25lLW1vbnRoIGV4dGVuc2lvbi5cblxuWW91cnMgZmFpdGhmdWxseSxcbkRhdmlkIFRyYW4ifV19LHsiaWQiOjIsImJhclRpdGxlIjoiUHJhY3RpY2UgVGVzdCAyIFx1MjAxMyBXcml0aW5nIFRhc2sgMjogUmVzcG9uZGluZyB0byBTdXJ2ZXkgUXVlc3Rpb25zIiwibmFtZSI6IlJlc3BvbmRpbmcgdG8gU3VydmV5IFF1ZXN0aW9ucyIsIm1pbnV0ZXMiOjI2LCJ3b3JkQWltIjoiMTUwXHUyMDEzMjAwIHdvcmRzIiwicmVhZEhlYWQiOiJSZWFkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIiwic2NlbmFyaW9IZWFkIjoiT2ZmaWNlIFVwZ3JhZGUgU3VydmV5Iiwic2NlbmFyaW8iOiJZb3VyIGNvbXBhbnkgaGFzIGV4dHJhIG1vbmV5IHRvIHNwZW5kIG9uIG9mZmljZSB1cGdyYWRlcy4gWW91ciBib3NzIHdhbnRzIHRvIGJ1aWxkIDUgYWRkaXRpb25hbCBwYXJraW5nIHNwYWNlcyBmb3IgdGhlIGVtcGxveWVlcy4gT25lIG9mIHlvdXIgY28td29ya2VycywgdGhvdWdoLCBzdWdnZXN0cyBidWlsZGluZyAzMCBiaWtlIHN0YW5kcyB0byBwcm9tb3RlIGEgaGVhbHRoeSBsaWZlc3R5bGUgaW5zdGVhZC4gVGhlIGNvbXBhbnkgYXNrZWQgeW91IHRvIHJlc3BvbmQgdG8gYW4gb3BpbmlvbiBzdXJ2ZXkuIiwicHJvbXB0SGVhZCI6IkNob29zZSB0aGUgb3B0aW9uIHRoYXQgeW91IHByZWZlci4gV2h5IGRvIHlvdSBwcmVmZXIgeW91ciBjaG9pY2U\/IEV4cGxhaW4gdGhlIHJlYXNvbnMgZm9yIHlvdXIgY2hvaWNlLiBXcml0ZSBhYm91dCAxNTBcdTIwMTMyMDAgd29yZHMuIiwiYnVsbGV0cyI6W10sIm9wdGlvbnMiOlt7ImtleSI6IkEiLCJsYWJlbCI6Ik9wdGlvbiBBOiBJIHdvdWxkIHByZWZlciB0byBoYXZlIG1vcmUgcGFya2luZyBzcGFjZXMuIn0seyJrZXkiOiJCIiwibGFiZWwiOiJPcHRpb24gQjogSSB3b3VsZCBwcmVmZXIgdG8gaGF2ZSBtb3JlIGJpa2Ugc3RhbmRzLiJ9XSwic2FtTm90ZSI6IlRoZXNlIGFyZSBBbGxFbmdsaXNoNFUgbW9kZWwgYW5zd2VycyB3cml0dGVuIGZvciB0aGlzIGV4YWN0IFRhc2sgMiBvcGluaW9uLXN1cnZleSBwcm9tcHQgKHBhcmtpbmcgc3BhY2VzIHZzIGJpa2Ugc3RhbmRzKSwgc2hvd24gYXQgdGhyZWUgc2NvcmUgbGV2ZWxzIChDRUxQSVAgNFx1MjAxMzUsIDdcdTIwMTM4IGFuZCAxMFx1MjAxMzEyKSBzbyB5b3UgY2FuIHNlZSBob3cgdGhlIHNhbWUgdGFzayByZWFkcyBhcyBpdCBpbXByb3Zlcy4gVGhleSBhcmUgQUU0VSBzdHVkeSBtb2RlbHMsIG5vdCBvZmZpY2lhbCBDRUxQSVAgc2FtcGxlczsgdGhlIDRcdTIwMTM1IG1vZGVsIGRlbGliZXJhdGVseSBrZWVwcyBzb21lIGVycm9ycy4iLCJzYW1wbGVzIjpbeyJsZXZlbCI6IkNFTFBJUCA0XHUyMDEzNSBSZXNwb25zZSIsIm5vdGUiOiJDaG9vc2VzIGEgc2lkZSAoT3B0aW9uIEEpIHdpdGggYmFzaWMgcmVhc29uczsgcmVwZXRpdGl2ZSBwaHJhc2luZyBhbmQgZ3JhbW1hciBlcnJvcnMsIGJ1dCB0aGUgb3BpbmlvbiBpcyBjbGVhci4iLCJ0ZXh0IjoiSW4gbXkgb3BpbmlvbiwgSSBjaG9vc2UgT3B0aW9uIEEuIEkgdGhpbmsgdGhlIGNvbXBhbnkgc2hvdWxkIGJ1aWxkIG1vcmUgcGFya2luZyBzcGFjZXMgZm9yIHRoZSBlbXBsb3llZXMuXG5cblRoZSBmaXJzdCByZWFzb24gaXMgdGhhdCBtYW55IHdvcmtlcnMgY29tZSB0byB0aGUgb2ZmaWNlIGJ5IGNhci4gT3VyIG9mZmljZSBpcyBmYXIgZnJvbSB0aGUgYnVzIHN0b3AgYW5kIHRoZXJlIGlzIG5vdCBlbm91Z2ggcGFya2luZyBub3cuIEV2ZXJ5IG1vcm5pbmcgcGVvcGxlIGRyaXZlIGFyb3VuZCBhIGxvbmcgdGltZSB0byBmaW5kIGEgcGxhY2UsIGFuZCBzb21lIHBhcmsgZmFyIGF3YXkgYW5kIGNvbWUgbGF0ZS4gVGhpcyBtYWtlIGV2ZXJ5Ym9keSBzdHJlc3NlZC5cblxuVGhlIHNlY29uZCByZWFzb24gaXMgdGhhdCBhIGJpa2UgaXMgbm90IGdvb2QgZm9yIGFsbCBwZW9wbGUuIFNvbWUgZW1wbG95ZWVzIGxpdmUgdmVyeSBmYXIsIHNvbWUgYXJlIG9sZCwgYW5kIGluIHdpbnRlciBpdCBpcyB2ZXJ5IGNvbGQgYW5kIHNub3d5LCBzbyBub2JvZHkgY2FuIHJpZGUgYSBiaWtlLiBPbmx5IGEgZmV3IHlvdW5nIHBlb3BsZSB3aWxsIHVzZSB0aGUgYmlrZSBzdGFuZHMsIGJ1dCBldmVyeWJvZHkgdXNlcyB0aGUgcGFya2luZy5cblxuU28gSSBiZWxpZXZlIHBhcmtpbmcgc3BhY2VzIGhlbHAgbW9yZSBwZW9wbGUgdGhhbiBiaWtlIHN0YW5kcy4gSXQgaXMgbW9yZSB1c2VmdWwgZm9yIHRoZSBjb21wYW55LiBUaGF0IGlzIHdoeSBJIHByZWZlciBPcHRpb24gQSwgbW9yZSBwYXJraW5nIHNwYWNlcy4gVGhhbmsgeW91LiJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiQSBjbGVhciBzdGFuY2UgKE9wdGlvbiBCKSB3aXRoIHR3byBkZXZlbG9wZWQgcmVhc29ucyBhbmQgYSBicmllZiBjb25jZXNzaW9uOyBnb29kIHJhbmdlIGFuZCBjb250cm9sLiIsInRleHQiOiJBZnRlciBjb25zaWRlcmluZyBib3RoIG9wdGlvbnMsIEkgd291bGQgcHJlZmVyIE9wdGlvbiBCOiBidWlsZGluZyAzMCBiaWtlIHN0YW5kcyBpbnN0ZWFkIG9mIGZpdmUgcGFya2luZyBzcGFjZXMuXG5cbk15IG1haW4gcmVhc29uIGlzIHZhbHVlLiBGaXZlIHBhcmtpbmcgc3BvdHMgd291bGQgb25seSBoZWxwIGZpdmUgcGVvcGxlLCB3aGVyZWFzIHRoaXJ0eSBiaWtlIHN0YW5kcyBjb3VsZCBiZW5lZml0IGZhciBtb3JlIGVtcGxveWVlcyB3aG8gd291bGQgYmUgZW5jb3VyYWdlZCB0byBjeWNsZSB0byB3b3JrLiBGb3IgdGhlIHNhbWUgbW9uZXksIHRoZSBjb21wYW55IHJlYWNoZXMgYSBtdWNoIGxhcmdlciBncm91cC5cblxuU2Vjb25kbHksIHByb21vdGluZyBjeWNsaW5nIHN1aXRzIGEgaGVhbHRoeSwgbW9kZXJuIHdvcmtwbGFjZS4gRW1wbG95ZWVzIHdobyByaWRlIHRvIHdvcmsgZ2V0IGRhaWx5IGV4ZXJjaXNlLCBhcnJpdmUgbW9yZSBlbmVyZ2V0aWMsIGFuZCB0ZW5kIHRvIHRha2UgZmV3ZXIgc2ljayBkYXlzLiBJdCBhbHNvIHJlZHVjZXMgdHJhZmZpYyBhbmQgcG9sbHV0aW9uIGFyb3VuZCBvdXIgYnVpbGRpbmcsIHdoaWNoIGltcHJvdmVzIHRoZSBjb21wYW55J3MgaW1hZ2UgaW4gdGhlIGNvbW11bml0eS5cblxuSSB1bmRlcnN0YW5kIHRoYXQgc29tZSBzdGFmZiBkZXBlbmQgb24gdGhlaXIgY2FycywgYnV0IG91ciBvZmZpY2UgaXMgYWxyZWFkeSBzZXJ2ZWQgYnkgYnVzZXMgYW5kIHNpdHMgY2xvc2UgdG8gYSBiaWtlIHBhdGgsIHNvIGN5Y2xpbmcgaXMgcmVhbGlzdGljIGZvciBtYW55IG9mIHVzLiBJZiB0aGUgcGxhbiBwcm92ZXMgcG9wdWxhciwgdGhlIGNvbXBhbnkgY291bGQgYWx3YXlzIGFkZCBwYXJraW5nIGxhdGVyLlxuXG5Gb3IgdGhlc2UgcmVhc29ucywgSSBiZWxpZXZlIGJpa2Ugc3RhbmRzIGFyZSB0aGUgc21hcnRlciBsb25nLXRlcm0gaW52ZXN0bWVudC4ifSx7ImxldmVsIjoiQ0VMUElQIDEwXHUyMDEzMTIgUmVzcG9uc2UiLCJub3RlIjoiQSBwb2xpc2hlZCwgdGlnaHRseSBhcmd1ZWQgcmVzcG9uc2UgKE9wdGlvbiBBKSB3aXRoIHByZWNpc2Ugdm9jYWJ1bGFyeSwgYSBmYWlyIGNvbmNlc3Npb24gYW5kIGEgc3Ryb25nIGNvbmNsdXNpb24uIiwidGV4dCI6IkhhdmluZyB3ZWlnaGVkIGJvdGggcHJvcG9zYWxzLCBJIHdvdWxkIGNob29zZSBPcHRpb24gQSBhbmQgcmVjb21tZW5kIHRoYXQgdGhlIGNvbXBhbnkgYnVpbGQgZml2ZSBhZGRpdGlvbmFsIHBhcmtpbmcgc3BhY2VzLlxuXG5NeSBwcmltYXJ5IHJlYXNvbiBpcyBnZW51aW5lIG5lZWQuIFRoZSBtYWpvcml0eSBvZiBvdXIgc3RhZmYgY29tbXV0ZSBieSBjYXIgYmVjYXVzZSB0aGUgb2ZmaWNlIGlzIHBvb3JseSBzZXJ2ZWQgYnkgcHVibGljIHRyYW5zcG9ydCwgYW5kIG91ciBjdXJyZW50IGxvdCBpcyBjaHJvbmljYWxseSBvdmVyY3Jvd2RlZC4gRW1wbG95ZWVzIHJvdXRpbmVseSBjaXJjbGUgdGhlIGJsb2NrIHNlYXJjaGluZyBmb3IgYSBzcGFjZSwgd2hpY2ggd2FzdGVzIHRpbWUsIGNhdXNlcyBzdHJlc3MgYW5kIG9jY2FzaW9uYWxseSBtYWtlcyBwZW9wbGUgbGF0ZSBmb3IgbWVldGluZ3MuIEZpdmUgZXh0cmEgc3BhY2VzIHdvdWxkIGRpcmVjdGx5IHJlbGlldmUgYSBkYWlseSwgdGFuZ2libGUgcHJvYmxlbS5cblxuV2hpbGUgSSBhcHByZWNpYXRlIHRoZSBoZWFsdGh5IGludGVudGlvbnMgYmVoaW5kIHRoZSBiaWtlLXN0YW5kIHByb3Bvc2FsLCBJIGFtIHNjZXB0aWNhbCB0aGF0IGl0IHdvdWxkIGJlIHdlbGwgdXNlZC4gTWFueSBjb2xsZWFndWVzIGxpdmUgdG9vIGZhciB0byBjeWNsZSwgYW5kIG91ciBsb25nLCBoYXJzaCB3aW50ZXJzIG1ha2UgcmlkaW5nIGltcHJhY3RpY2FsIGZvciBtdWNoIG9mIHRoZSB5ZWFyLiBUaGUgc3RhbmRzIHdvdWxkIGxpa2VseSBzaXQgZW1wdHkgd2hpbGUgdGhlIHBhcmtpbmcgc2hvcnRhZ2UgcGVyc2lzdGVkLlxuXG5VbHRpbWF0ZWx5LCBhbiB1cGdyYWRlIHNob3VsZCBzb2x2ZSBhIHJlYWwgcHJvYmxlbSByYXRoZXIgdGhhbiBhbiBhc3BpcmF0aW9uYWwgb25lLiBCZWNhdXNlIHBhcmtpbmcgaXMgYSBwcmVzc2luZywgeWVhci1yb3VuZCBpc3N1ZSBhZmZlY3RpbmcgbW9zdCBlbXBsb3llZXMsIEkgZmlybWx5IGJlbGlldmUgdGhlIGZ1bmRzIGFyZSBiZXR0ZXIgc3BlbnQgb24gYWRkaXRpb25hbCBwYXJraW5nIHNwYWNlcy4ifV19XSwicnVicmljIjpbeyJrIjoiQ29udGVudCAvIENvaGVyZW5jZSIsImQiOiJBbGwgcmVxdWlyZWQgcG9pbnRzIGFyZSBjb3ZlcmVkIGFuZCBkZXZlbG9wZWQgd2l0aCBjbGVhciwgbG9naWNhbGx5IGNvbm5lY3RlZCBpZGVhcyBhbmQgcGFyYWdyYXBocy4ifSx7ImsiOiJWb2NhYnVsYXJ5IiwiZCI6IldvcmQgY2hvaWNlIGlzIHZhcmllZCwgcHJlY2lzZSBhbmQgc3VpdHMgdGhlIHRvbmUgKGEgc2VtaS1mb3JtYWwgZW1haWwgLyBhIHJlYXNvbmVkIG9waW5pb24pLiJ9LHsiayI6IlJlYWRhYmlsaXR5IiwiZCI6IkdyYW1tYXIsIHNwZWxsaW5nIGFuZCBwdW5jdHVhdGlvbiBhcmUgYWNjdXJhdGUgZW5vdWdoIHRoYXQgdGhlIHJlYWRlciBpcyBuZXZlciBzbG93ZWQgZG93bi4ifSx7ImsiOiJUYXNrIEZ1bGZpbGxtZW50IiwiZCI6IlRoZSByZXNwb25zZSBmaXRzIHRoZSBwdXJwb3NlIGFuZCBhdWRpZW5jZSwga2VlcHMgdGhlIDE1MFx1MjAxMzIwMCB3b3JkIGxlbmd0aCwgYW5kIHJlYWRzIGxpa2UgYSByZWFsIGVtYWlsIC8gc3VydmV5IGFuc3dlci4ifV0sInNjb3JpbmdOb3RlIjoiQ0VMUElQIFdyaXRpbmcgaXMgcmF0ZWQgYnkgaHVtYW4gcmF0ZXJzIG9uIGEgc2NhbGUgZnJvbSBNIHRvIDEyIHRoYXQgbWFwcyAxOjEgdG8gdGhlIENhbmFkaWFuIExhbmd1YWdlIEJlbmNobWFya3MgKENMQikuIEVhY2ggdGFzayBpcyBqdWRnZWQgaG9saXN0aWNhbGx5IG9uIGZvdXIgZGltZW5zaW9ucyBcdTIwMTQgQ29udGVudC9Db2hlcmVuY2UsIFZvY2FidWxhcnksIFJlYWRhYmlsaXR5IGFuZCBUYXNrIEZ1bGZpbGxtZW50LiBUaGVyZSBpcyBubyBzaW5nbGUgXHUyMDE4Y29ycmVjdFx1MjAxOSBhbnN3ZXIsIHNvIHVzZSB0aGUgc2FtcGxlIHJlc3BvbnNlcyBhbmQgdGhlIHNlbGYtY2hlY2sgYmVsb3cgdG8gc2VlIHdoZXJlIHlvdXIgd3JpdGluZyBzaXRzIGFuZCB3aGF0IHRvIGltcHJvdmUuIn07CihmdW5jdGlvbigpewogICJ1c2Ugc3RyaWN0IjsKICBpZih3aW5kb3cuX19jbHB3SW5pdCkgcmV0dXJuOyB3aW5kb3cuX19jbHB3SW5pdCA9IHRydWU7CgogIHZhciBMUyA9ICJhZTR1X2NscHdfczF0MV92MSI7CiAgdmFyIHN0YXRlID0geyBhY3RpdmU6MSwgc2FtcGxlczp7MTpmYWxzZSwyOmZhbHNlfSwgdGFiOnsxOjAsMjowfSwgb3B0Om51bGwsCiAgICAgICAgICAgICAgICB0ZXh0OnsxOiIiLDI6IiJ9LCBydWJyaWM6ezE6e30sMjp7fX0sCiAgICAgICAgICAgICAgICB0aW1lcjp7MTp7cmVtOldEQVRBLnRhc2tzWzBdLm1pbnV0ZXMqNjAscnVuOmZhbHNlLGl2Om51bGx9LAogICAgICAgICAgICAgICAgICAgICAgICAyOntyZW06V0RBVEEudGFza3NbMV0ubWludXRlcyo2MCxydW46ZmFsc2UsaXY6bnVsbH19IH07CgogIC8vIC0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tCiAgZnVuY3Rpb24gZXNjKHMpeyByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKTsgfQogIGZ1bmN0aW9uIHdjKHMpeyB2YXIgbT0oc3x8IiIpLnRyaW0oKS5tYXRjaCgvXFMrL2cpOyByZXR1cm4gbT9tLmxlbmd0aDowOyB9CiAgZnVuY3Rpb24gZm10KHNlYyl7IHNlYz1NYXRoLm1heCgwLHNlY3wwKTsgdmFyIG09TWF0aC5mbG9vcihzZWMvNjApLCBzPXNlYyU2MDsgcmV0dXJuIChtPDEwPyIwIjoiIikrbSsiOiIrKHM8MTA\/IjAiOiIiKStzOyB9CiAgZnVuY3Rpb24gbG9hZCgpeyB0cnl7IHZhciBvPUpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTFMpKTsgaWYobyYmdHlwZW9mIG89PT0ib2JqZWN0Iil7CiAgICAgICAgc3RhdGUudGV4dFsxXT1vLnQxfHwiIjsgc3RhdGUudGV4dFsyXT1vLnQyfHwiIjsgc3RhdGUub3B0PW8ub3B0fHxudWxsOwogICAgICAgIHN0YXRlLnJ1YnJpY1sxXT1vLnIxfHx7fTsgc3RhdGUucnVicmljWzJdPW8ucjJ8fHt9OyB9IH1jYXRjaChlKXt9IH0KICBmdW5jdGlvbiBzYXZlKCl7IHRyeXsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFMsIEpTT04uc3RyaW5naWZ5KHsKICAgICAgICB0MTpzdGF0ZS50ZXh0WzFdLCB0MjpzdGF0ZS50ZXh0WzJdLCBvcHQ6c3RhdGUub3B0LCByMTpzdGF0ZS5ydWJyaWNbMV0sIHIyOnN0YXRlLnJ1YnJpY1syXSB9KSk7IH1jYXRjaChlKXt9CiAgICAgICAgZmxhc2hTYXZlZCgpOyB9CiAgdmFyIHNhdmVkVE89bnVsbDsKICBmdW5jdGlvbiBmbGFzaFNhdmVkKCl7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhdmVkIik7IGlmKCFlbCkgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoImNscHctc2F2ZWQtb24iKTsgaWYoc2F2ZWRUTykgY2xlYXJUaW1lb3V0KHNhdmVkVE8pOwogICAgICAgIHNhdmVkVE89c2V0VGltZW91dChmdW5jdGlvbigpeyBlbC5jbGFzc0xpc3QucmVtb3ZlKCJjbHB3LXNhdmVkLW9uIik7IH0sMTIwMCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBDU1MgLS0tLS0tLS0tLQogIHZhciBDU1MgPSAiIgogICsiLmNscHctd3JhcHstLW5hdnk6IzA1MEUyMDstLWI5MDA6IzBEMjM1MjstLWI3MDA6IzEyNDVBODstLWI1MDA6IzI1NjNFQjstLWI0MDA6IzNCODJGNjstLWIyMDA6IzkzQzVGRDstLWIxMDA6I0RCRUFGRTstLWI1MDojRUZGNkZGOy0tdGVhbDojMEQ5NDg4Oy0tZ3JlZW46IzEwQjk4MTstLWdyZWVuNTA6I0VDRkRGNTstLXJvc2U6I0Y0M0Y1RTstLXJvc2U1MDojRkZGMUYzOy0tb3JhbmdlOiNGOTczMTY7LS1hbWJlcjUwOiNGRkZCRUI7LS10ZXh0OiMwRjE3MkE7LS1tdXRlZDojNDc1NTY5Oy0tc3VidGxlOiM5NEEzQjg7LS1ib3JkZXI6I0UyRThGMDstLWNyaW1zb246I0I0MkIzQzstLXBhZ2U6I0Y4RkFGRjtmb250LWZhbWlseTonUGx1cyBKYWthcnRhIFNhbnMnLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxzYW5zLXNlcmlmO2NvbG9yOnZhcigtLXRleHQpO21heC13aWR0aDoxMTQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjE2cHggMTZweCA1NnB4O2xpbmUtaGVpZ2h0OjEuNTU7Zm9udC1zaXplOjE2cHg7fSIKICArIi5jbHB3LXdyYXAgKiwuY2xwdy13cmFwICo6OmJlZm9yZSwuY2xwdy13cmFwICo6OmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDt9IgogICsiLmNscHctd3JhcCBidXR0b257Zm9udC1mYW1pbHk6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjt9IgogICsiLmNscHctd3JhcCBoMSwuY2xwdy13cmFwIGgyLC5jbHB3LXdyYXAgaDMsLmNscHctd3JhcCBwe21hcmdpbjowO30iCiAgLy8gaGVybwogICsiLmNscHctaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoyMnB4O2JhY2tncm91bmQ6dmFyKC0tbmF2eSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjM0cHggMzhweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxM3B4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNoYWRvdzowIDIwcHggNDBweCAtMjBweCByZ2JhKDUsMTQsMzIsLjQ1KSwwIDRweCAxMnB4IC02cHggcmdiYSg1LDE0LDMyLC4zKTt9IgogICsiLmNscHctYXVyb3Jhe3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt9IgogICsiLmNscHctYXVyb3JhIHNwYW57cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7ZmlsdGVyOmJsdXIoNjBweCk7b3BhY2l0eTouNTthbmltYXRpb246Y2xwd0Zsb2F0IDE0cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7fSIKICArIi5jbHB3LWF1cm9yYSBzcGFuOm50aC1jaGlsZCgxKXt3aWR0aDo0MjBweDtoZWlnaHQ6NDIwcHg7bGVmdDotMTIwcHg7dG9wOi0yMDBweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzEyNDVBOCAwJSx0cmFuc3BhcmVudCA3MCUpO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMil7d2lkdGg6MzgwcHg7aGVpZ2h0OjM4MHB4O3JpZ2h0Oi04MHB4O3RvcDotMTYwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMwRDk0ODggMCUsdHJhbnNwYXJlbnQgNzAlKTthbmltYXRpb24tZGVsYXk6LTRzO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMyl7d2lkdGg6MzQwcHg7aGVpZ2h0OjM0MHB4O3JpZ2h0OjIyJTtib3R0b206LTI0MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMjU2M0VCIDAlLHRyYW5zcGFyZW50IDcwJSk7YW5pbWF0aW9uLWRlbGF5Oi04czt9IgogICsiQGtleWZyYW1lcyBjbHB3RmxvYXR7ZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpO310b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoNDBweCwyNnB4LDApIHNjYWxlKDEuMTIpO319IgogICsiLmNscHctaGJhZGdlc3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO30iCiAgKyIuY2xwdy1iYnJhbmR7YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTJweDtsZXR0ZXItc3BhY2luZzouMTJlbTtwYWRkaW5nOjVweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O30iCiAgKyIuY2xwdy1ic2V0e2NvbG9yOnZhcigtLWIyMDApO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt9IgogICsiLmNscHctaGVybyBoMXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6Y2xhbXAoMjZweCw0dncsNDBweCk7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi0uMDJlbTtsaW5lLWhlaWdodDoxLjEyO30iCiAgKyIuY2xwdy1oZXJvLXN1Yntwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojQzdEMkU4O2ZvbnQtc2l6ZToxNXB4O21heC13aWR0aDo2MGNoO30iCiAgKyIuY2xwdy1oY2hpcHN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7cG9zaXRpb246cmVsYXRpdmU7fSIKICArIi5jbHB3LWNoaXB7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDE0NywxOTcsMjUzLC4yNSk7Y29sb3I6I0RCRUFGRTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjMycHg7YmFja2Ryb3AtZmlsdGVyOmJsdXIoNHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGVhc2UsYmFja2dyb3VuZCAuMjVzIGVhc2U7fSIKICArIi5jbHB3LWNoaXA6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNSk7fSIKICArIi5jbHB3LWN0YXtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjEzcHggMzRweDttYXJnaW4tdG9wOjJweDtib3gtc2hhZG93OjAgMTBweCAyMnB4IC04cHggcmdiYSgzNyw5OSwyMzUsLjY1KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjJzIGVhc2UsYm94LXNoYWRvdyAuMjJzIGVhc2UsYmFja2dyb3VuZCAuMjJzIGVhc2U7fSIKICArIi5jbHB3LWN0YTpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtiYWNrZ3JvdW5kOnZhcigtLWI0MDApO2JveC1zaGFkb3c6MCAxNHB4IDI2cHggLThweCByZ2JhKDM3LDk5LDIzNSwuNzUpO30iCiAgLy8gdG9vbGJhcgogICsiLmNscHctdG9vbHN7cG9zaXRpb246c3RpY2t5O3RvcDo4cHg7ei1pbmRleDo2MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuOTMpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDhweCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjhweCAxMnB4O21hcmdpbjoxOHB4IDAgMDtib3gtc2hhZG93OjAgOHB4IDI0cHggLTE0cHggcmdiYSgxNSwyMyw0MiwuMjUpLDAgMnB4IDZweCAtNHB4IHJnYmEoMTUsMjMsNDIsLjEyKTttaW4taGVpZ2h0OjUycHg7fSIKICArIi5jbHB3LXdjb3VudHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tYjkwMCk7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6N3B4IDE0cHg7fSIKICArIi5jbHB3LXNwYWNlcntmbGV4OjE7fSIKICArIi5jbHB3LXNhdmVke2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbik7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZTt9IgogICsiLmNscHctc2F2ZWQtb257b3BhY2l0eToxO30iCiAgKyIuY2xwdy10YnRue2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzo5cHggMTZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLW11dGVkKTttaW4taGVpZ2h0OjQwcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UsYm94LXNoYWRvdyAuMnMgZWFzZSxiYWNrZ3JvdW5kIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10YnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO2JveC1zaGFkb3c6MCA2cHggMTRweCAtOHB4IHJnYmEoMTUsMjMsNDIsLjMpO30iCiAgLy8gZG90cwogICsiLmNscHctc2lte21hcmdpbi10b3A6MThweDt9IgogICsiLmNscHctZG90c3tkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW46MCAwIDEwcHggMnB4O30iCiAgKyIuY2xwdy1kb3R7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1zdWJ0bGUpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXItcmFkaXVzOjMycHg7cGFkZGluZzo1cHggMTRweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjI1cyBlYXNlLGNvbG9yIC4yNXMgZWFzZTt9IgogICsiLmNscHctZG90Lm9ue2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7fSIKICArIi5jbHB3LWRvdC5maWxsZWR7YmFja2dyb3VuZDp2YXIoLS1iMTAwKTtib3JkZXItY29sb3I6dmFyKC0tYjIwMCk7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICAvLyBjYXQgY2FyZAogICsiLmNscHctY2F0e3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI0QzRDlFMDtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MCAxMHB4IDMwcHggLTE4cHggcmdiYSgxNSwyMyw0MiwuMjIpLDAgMnB4IDhweCAtNXB4IHJnYmEoMTUsMjMsNDIsLjEpO30iCiAgKyIuY2xwdy10YXNre2Rpc3BsYXk6bm9uZTt9IgogICsiLmNscHctdGFzay5vbntkaXNwbGF5OmJsb2NrO30iCiAgKyIuY2xwdy1iYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtiYWNrZ3JvdW5kOiNFOEVCRUY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0QzRDlFMDtib3JkZXItcmFkaXVzOjEwcHggMTBweCAwIDA7cGFkZGluZzo5cHggMTRweDttaW4taGVpZ2h0OjQ0cHg7fSIKICArIi5jbHB3LWJhci10e2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMUYyOTM3O2ZsZXg6MTttaW4td2lkdGg6MDt9IgogICsiLmNscHctYmFyLXRpbWV7Zm9udC1zaXplOjEycHg7Y29sb3I6IzFGMjkzNzt3aGl0ZS1zcGFjZTpub3dyYXA7fSIKICArIi5jbHB3LWJhci10aW1lIGJ7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczt9IgogICsiLmNscHctYmFyLXRpbWUubG93IGJ7Y29sb3I6dmFyKC0tcm9zZSk7fSIKICAvLyBzcGxpdAogICsiLmNscHctc3BsaXR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMjIwcHgsMjkwcHgpIDFmcjt9IgogICsiLmNscHctcmVhZHtiYWNrZ3JvdW5kOiNGNEY2Rjg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRTNFNkVBO3BhZGRpbmc6MTZweCAxNnB4IDE4cHg7fSIKICArIi5jbHB3LXdyaXRle2JhY2tncm91bmQ6I0VBRjRGNztwYWRkaW5nOjE2cHggMThweCAxOHB4O30iCiAgKyIuY2xwdy1yaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OHB4O21hcmdpbi1ib3R0b206OHB4O30iCiAgKyIuY2xwdy1pbmZve2ZsZXg6bm9uZTt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbi10b3A6MXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjExcHg7Zm9udC1zdHlsZTppdGFsaWM7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LWZhbWlseTpHZW9yZ2lhLHNlcmlmO30iCiAgKyIuY2xwdy1yaGVhZCBwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctc2NlbmFyaW8taHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzMzNDE1NTttYXJnaW4tYm90dG9tOjRweDt9IgogICsiLmNscHctc2NlbmFyaW97Zm9udC1zaXplOjEzLjVweDtjb2xvcjojMzM0MTU1O2xpbmUtaGVpZ2h0OjEuNjt9IgogICsiLmNscHctc2FtdG9nZ2xle21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MS41cHggc29saWQgdmFyKC0tY3JpbXNvbik7Y29sb3I6dmFyKC0tY3JpbXNvbik7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHg7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMXB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy1zYW10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtjb2xvcjojZmZmO30iCiAgKyIuY2xwdy1wcm9tcHRyb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDttYXJnaW4tYm90dG9tOjhweDt9IgogICsiLmNscHctcHJvbXB0cm93IHB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI5MDApO30iCiAgKyIuY2xwdy1idWxsZXRze21hcmdpbjowIDAgMTJweCAwO3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiMzMzQxNTU7Zm9udC1zaXplOjEzLjVweDt9IgogICsiLmNscHctYnVsbGV0cyBsaXttYXJnaW46M3B4IDA7fSIKICArIi5jbHB3LW9wdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O21hcmdpbjowIDAgMTJweDt9IgogICsiLmNscHctb3B0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo5cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI0Q2RThFRDtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEwcHggMTJweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTMuNXB4O2NvbG9yOiMzMzQxNTU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UsYmFja2dyb3VuZCAuMnMgZWFzZTt9IgogICsiLmNscHctb3B0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1iNDAwKTt9IgogICsiLmNscHctb3B0LnNlbHtib3JkZXItY29sb3I6dmFyKC0tYjUwMCk7YmFja2dyb3VuZDp2YXIoLS1iNTApO30iCiAgKyIuY2xwdy1vcHQgaW5wdXR7bWFyZ2luLXRvcDozcHg7YWNjZW50LWNvbG9yOnZhcigtLWI1MDApO2ZsZXg6bm9uZTt9IgogICsiLmNscHctdGF7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjI2MHB4O3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6MXB4IHNvbGlkICNDOUQ2RGM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxM3B4IDE0cHg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjojMEYxNzJBO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDNweCByZ2JhKDE1LDIzLDQyLC4wNSk7fSIKICArIi5jbHB3LXRhOmZvY3Vze291dGxpbmU6bm9uZTtib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSg1OSwxMzAsMjQ2LC4xNSk7fSIKICArIi5jbHB3LXdtZXRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6OXB4O30iCiAgKyIuY2xwdy13cGlsbHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7fSIKICArIi5jbHB3LXdwaWxsLmxvd3tjb2xvcjp2YXIoLS1tdXRlZCk7fSIKICArIi5jbHB3LXdwaWxsLmdvb2R7Y29sb3I6IzA0Nzg1NztiYWNrZ3JvdW5kOnZhcigtLWdyZWVuNTApO2JvcmRlci1jb2xvcjojQTdGM0QwO30iCiAgKyIuY2xwdy13cGlsbC5vdmVye2NvbG9yOiNCNDUzMDk7YmFja2dyb3VuZDp2YXIoLS1hbWJlcjUwKTtib3JkZXItY29sb3I6I0ZERTY4QTt9IgogICsiLmNscHctd3BpbGwubWF4e2NvbG9yOiNCRTEyM0M7YmFja2dyb3VuZDp2YXIoLS1yb3NlNTApO2JvcmRlci1jb2xvcjojRkVDREQzO30iCiAgKyIuY2xwdy10bXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1sZWZ0OmF1dG87fSIKICArIi5jbHB3LXRtci1idG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo3cHggMTJweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzIGVhc2UsY29sb3IgLjJzIGVhc2UsYm9yZGVyLWNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10bXItYnRuOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1iNDAwKTtjb2xvcjp2YXIoLS1iNzAwKTt9IgogICsiLmNscHctdG1yLWJ0bi5ydW57YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtib3JkZXItY29sb3I6dmFyKC0tYjUwMCk7Y29sb3I6I2ZmZjt9IgogIC8vIHNhbXBsZSBwYW5lbAogICsiLmNscHctc2FtcGxlc3ttYXJnaW4tdG9wOjE0cHg7Ym9yZGVyLXRvcDoxcHggZGFzaGVkICNEM0Q5RTA7cGFkZGluZzoxNnB4IDE4cHggMjBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czowIDAgMTBweCAxMHB4O30iCiAgKyIuY2xwdy1zYW1wbGVzW2hpZGRlbl17ZGlzcGxheTpub25lO30iCiAgKyIuY2xwdy1zYW1ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206MTJweDt9IgogICsiLmNscHctdGFic3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEycHg7fSIKICArIi5jbHB3LXRhYntib3JkZXI6MXB4IHNvbGlkICNEOURFRTU7YmFja2dyb3VuZDojRjFGM0Y2O2NvbG9yOiM0NzU1Njk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDE2cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10YWIub257YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtib3JkZXItY29sb3I6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjt9IgogICsiLmNscHctc2FtYm9keXtiYWNrZ3JvdW5kOiNGN0Y4RkE7Ym9yZGVyOjFweCBzb2xpZCAjRTdFQUVFO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDt9IgogICsiLmNscHctc2FtbHZse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tY3JpbXNvbik7bWFyZ2luLWJvdHRvbTo4cHg7fSIKICArIi5jbHB3LXNhbXRleHR7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzFGMjkzNztsaW5lLWhlaWdodDoxLjc7d2hpdGUtc3BhY2U6cHJlLXdyYXA7fSIKICArIi5jbHB3LXNhbWhpbnR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzQ3NTU2OTtiYWNrZ3JvdW5kOiNFRUYyRkY7Ym9yZGVyOjFweCBzb2xpZCAjREJFM0ZGO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDEycHg7fSIKICArIi5jbHB3LXNhbWhpbnQgYntjb2xvcjp2YXIoLS1iOTAwKTt9IgogIC8vIHJ1YnJpYyAvIHNjb3JpbmcKICArIi5jbHB3LXBhbmVse21hcmdpbi10b3A6MThweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjIwcHggMjJweDtib3gtc2hhZG93OjAgMTBweCAzMHB4IC0yMHB4IHJnYmEoMTUsMjMsNDIsLjIpO30iCiAgKyIuY2xwdy1wYW5lbCBoMntmb250LXNpemU6MTlweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYjkwMCk7bWFyZ2luLWJvdHRvbTo0cHg7fSIKICArIi5jbHB3LXBhbmVsIC5jbHB3LWxlYWR7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbToxNHB4O30iCiAgKyIuY2xwdy1ydWJncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweDt9IgogICsiLmNscHctcnVie2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMnB4IDE0cHg7YmFja2dyb3VuZDojRkNGREZGO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLGJhY2tncm91bmQgLjJzIGVhc2U7fSIKICArIi5jbHB3LXJ1Yjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fSIKICArIi5jbHB3LXJ1Yi5kb25le2JvcmRlci1jb2xvcjojQTdGM0QwO2JhY2tncm91bmQ6dmFyKC0tZ3JlZW41MCk7fSIKICArIi5jbHB3LXJ1YiBpbnB1dHttYXJnaW4tdG9wOjNweDthY2NlbnQtY29sb3I6dmFyKC0tZ3JlZW4pO2ZsZXg6bm9uZTt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O30iCiAgKyIuY2xwdy1ydWIta3tmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctcnViLWR7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1tdXRlZCk7bGluZS1oZWlnaHQ6MS41O21hcmdpbi10b3A6MnB4O30iCiAgKyIuY2xwdy1zY29yZWJveHttYXJnaW4tdG9wOjE0cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzMzNDE1NTtsaW5lLWhlaWdodDoxLjY7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAxNnB4O30iCiAgKyIuY2xwdy1zY29yZWJveCBie2NvbG9yOnZhcigtLWI5MDApO30iCiAgKyIuY2xwdy1jbGJyb3d7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoxMnB4O30iCiAgKyIuY2xwdy1jbGJ0YWd7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI3MDApO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjZweCAxM3B4O30iCiAgKyIuY2xwdy1mb290e21hcmdpbi10b3A6MTZweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zdWJ0bGUpO3RleHQtYWxpZ246Y2VudGVyO30iCiAgKyJAbWVkaWEobWF4LXdpZHRoOjgyMHB4KXsuY2xwdy1zcGxpdHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyO30uY2xwdy1yZWFke2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFM0U2RUE7fS5jbHB3LXJ1YmdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9LmNscHctaGVyb3twYWRkaW5nOjI2cHggMjJweDt9fSIKICA7CgogIGZ1bmN0aW9uIGluamVjdENTUygpeyBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1N0eWxlIikpIHJldHVybjsKICAgIHZhciBzdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOyBzdC5pZD0iY2xwd1N0eWxlIjsgc3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQ1NTKSk7CiAgICAoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBidWlsZCAtLS0tLS0tLS0tCiAgZnVuY3Rpb24gdGFza0hUTUwodCl7CiAgICB2YXIgZD1XREFUQS50YXNrc1t0LTFdOyB2YXIgaD0iIjsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXRhc2snKyh0PT09c3RhdGUuYWN0aXZlPycgb24nOicnKSsnIiBkYXRhLXRhc2s9IicrdCsnIiBpZD0iY2xwd1Rhc2snK3QrJyI+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1iYXIiPjxzcGFuIGNsYXNzPSJjbHB3LWJhci10Ij4nK2VzYyhkLmJhclRpdGxlKSsnPC9zcGFuPicKICAgICAgICsnPHNwYW4gY2xhc3M9ImNscHctYmFyLXRpbWUiIGlkPSJjbHB3QmFyVGltZScrdCsnIj5UaW1lIHJlbWFpbmluZzogPGI+JytmbXQoc3RhdGUudGltZXJbdF0ucmVtKSsnPC9iPjwvc3Bhbj4nCiAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10bmV4dD0iJyt0KyciPicrKHQ8V0RBVEEudGFza3MubGVuZ3RoPydORVhUJzonRE9ORScpKyc8L2J1dHRvbj48L2Rpdj4nOwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LXNwbGl0Ij4nOwogICAgLy8gbGVmdAogICAgaCs9ICAnPGRpdiBjbGFzcz0iY2xwdy1yZWFkIj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctcmhlYWQiPjxzcGFuIGNsYXNzPSJjbHB3LWluZm8iPmk8L3NwYW4+PHA+Jytlc2MoZC5yZWFkSGVhZCkrJzwvcD48L2Rpdj4nOwogICAgaWYoZC5zY2VuYXJpb0hlYWQpeyBoKz0nPGRpdiBjbGFzcz0iY2xwdy1zY2VuYXJpby1oIj4nK2VzYyhkLnNjZW5hcmlvSGVhZCkrJzwvZGl2Pic7IH0KICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXNjZW5hcmlvIj4nK2VzYyhkLnNjZW5hcmlvKSsnPC9kaXY+JzsKICAgIGgrPSAgICc8YnV0dG9uIGNsYXNzPSJjbHB3LXNhbXRvZ2dsZSIgZGF0YS1zYW10b2dnbGU9IicrdCsnIj5DbGljayBoZXJlIHRvIHZpZXcgc2FtcGxlIHJlc3BvbnNlczwvYnV0dG9uPic7CiAgICBoKz0gICc8L2Rpdj4nOwogICAgLy8gcmlnaHQKICAgIGgrPSAgJzxkaXYgY2xhc3M9ImNscHctd3JpdGUiPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1wcm9tcHRyb3ciPjxzcGFuIGNsYXNzPSJjbHB3LWluZm8iPmk8L3NwYW4+PHA+Jytlc2MoZC5wcm9tcHRIZWFkKSsnPC9wPjwvZGl2Pic7CiAgICBpZihkLmJ1bGxldHMgJiYgZC5idWxsZXRzLmxlbmd0aCl7IGgrPSc8dWwgY2xhc3M9ImNscHctYnVsbGV0cyI+JzsgZC5idWxsZXRzLmZvckVhY2goZnVuY3Rpb24oYil7IGgrPSc8bGk+Jytlc2MoYikrJzwvbGk+JzsgfSk7IGgrPSc8L3VsPic7IH0KICAgIGlmKGQub3B0aW9ucyl7IGgrPSc8ZGl2IGNsYXNzPSJjbHB3LW9wdHMiPic7IGQub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG8pewogICAgICAgIGgrPSc8bGFiZWwgY2xhc3M9ImNscHctb3B0Jysoc3RhdGUub3B0PT09by5rZXk\/JyBzZWwnOicnKSsnIiBkYXRhLW9wdHdyYXA9Iicrby5rZXkrJyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjbHB3T3B0IiB2YWx1ZT0iJytvLmtleSsnIicrKHN0YXRlLm9wdD09PW8ua2V5PycgY2hlY2tlZCc6JycpKyc+PHNwYW4+Jytlc2Moby5sYWJlbCkrJzwvc3Bhbj48L2xhYmVsPic7IH0pOwogICAgICAgIGgrPSc8L2Rpdj4nOyB9CiAgICBoKz0gICAnPHRleHRhcmVhIGNsYXNzPSJjbHB3LXRhIiBpZD0iY2xwd1RhJyt0KyciIGRhdGEtdGE9IicrdCsnIiBwbGFjZWhvbGRlcj0iVHlwZSB5b3VyIHJlc3BvbnNlIGhlcmUuLi4iPicrZXNjKHN0YXRlLnRleHRbdF0pKyc8L3RleHRhcmVhPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy13bWV0ZXIiPic7CiAgICBoKz0gICAgICc8c3BhbiBjbGFzcz0iY2xwdy13cGlsbCIgaWQ9ImNscHdXcGlsbCcrdCsnIj4wIHdvcmRzPC9zcGFuPic7CiAgICBoKz0gICAgICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjVweDtjb2xvcjojNjQ3NDhCOyI+YWltICcrZXNjKGQud29yZEFpbSkrJzwvc3Bhbj4nOwogICAgaCs9ICAgICAnPHNwYW4gY2xhc3M9ImNscHctdG1yIj4nCiAgICAgICAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10c3RhcnQ9IicrdCsnIj5TdGFydCB0aW1lcjwvYnV0dG9uPicKICAgICAgICAgICAgICsnPGJ1dHRvbiBjbGFzcz0iY2xwdy10bXItYnRuIiBkYXRhLXRyZXNldD0iJyt0KyciPlJlc2V0PC9idXR0b24+PC9zcGFuPic7CiAgICBoKz0gICAnPC9kaXY+JzsKICAgIGgrPSAgJzwvZGl2Pic7CiAgICBoKz0gJzwvZGl2Pic7IC8vIHNwbGl0CiAgICAvLyBzYW1wbGVzCiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctc2FtcGxlcyIgaWQ9ImNscHdTYW0nK3QrJyIgaGlkZGVuPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1zYW1ub3RlIj4nKyhkLnNhbU5vdGU\/ZC5zYW1Ob3RlOidUaGVzZSBhcmUgdGhlIG9mZmljaWFsIHByYWN0aWNlIHNhbXBsZSByZXNwb25zZXMgYXQgdGhyZWUgc2NvcmUgbGV2ZWxzLiBMb3dlci1sZXZlbCBzYW1wbGVzIGtlZXAgdGhlaXIgb3JpZ2luYWwgbWlzdGFrZXMgb24gcHVycG9zZSAmbWRhc2g7IHN0dWR5IHdoYXQgY2hhbmdlcyBhcyB0aGUgc2NvcmUgcmlzZXMuJykrJzwvZGl2Pic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy10YWJzIiBpZD0iY2xwd1RhYnMnK3QrJyI+JzsKICAgIGQuc2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHMsaSl7IGgrPSc8YnV0dG9uIGNsYXNzPSJjbHB3LXRhYicrKGk9PT0wPycgb24nOicnKSsnIiBkYXRhLXRhYj0iJyt0KyciIGRhdGEtaT0iJytpKyciPicrZXNjKHMubGV2ZWwpKyc8L2J1dHRvbj4nOyB9KTsKICAgIGgrPSAgICc8L2Rpdj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctc2FtYm9keSIgaWQ9ImNscHdTYW1Cb2R5Jyt0KyciPjwvZGl2Pic7CiAgICBoKz0gJzwvZGl2Pic7CiAgICBoKz0nPC9kaXY+JzsKICAgIHJldHVybiBoOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyKCl7CiAgICB2YXIgcm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0FwcCIpOyBpZighcm9vdCkgcmV0dXJuOwogICAgdmFyIG09V0RBVEEubWV0YSwgaD0iIjsKICAgIC8vIGhlcm8KICAgIGgrPSc8c2VjdGlvbiBjbGFzcz0iY2xwdy1oZXJvIj48ZGl2IGNsYXNzPSJjbHB3LWF1cm9yYSI+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1oYmFkZ2VzIj48c3BhbiBjbGFzcz0iY2xwdy1iYnJhbmQiPicrZXNjKG0uYnJhbmQpKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctYnNldCI+Jytlc2MobS5zZXQpKyc8L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGgxPicrZXNjKG0udGl0bGUpKyc8L2gxPic7CiAgICBoKz0gJzxwIGNsYXNzPSJjbHB3LWhlcm8tc3ViIj5Xcml0ZSB5b3VyIHJlc3BvbnNlLCB0aW1lIHlvdXJzZWxmLCB0aGVuIGNvbXBhcmUgaXQgd2l0aCBvZmZpY2lhbCBzYW1wbGUgYW5zd2VycyBhdCB0aHJlZSBzY29yZSBsZXZlbHMgJm1kYXNoOyBDRUxQSVAgNCZuZGFzaDs1LCA3Jm5kYXNoOzggYW5kIDEwJm5kYXNoOzEyLjwvcD4nOwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LWhjaGlwcyI+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+MiB0YXNrczwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jaGlwIj5+JyttLnRvdGFsTWluKycgbWludXRlczwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jaGlwIj4xNTAmbmRhc2g7MjAwIHdvcmRzIGVhY2g8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+U2FtcGxlIGFuc3dlcnMgaW5jbHVkZWQ8L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGJ1dHRvbiBjbGFzcz0iY2xwdy1jdGEiIGlkPSJjbHB3U3RhcnQiPlN0YXJ0IHdyaXRpbmc8L2J1dHRvbj4nOwogICAgaCs9Jzwvc2VjdGlvbj4nOwogICAgLy8gdG9vbGJhcgogICAgaCs9JzxkaXYgY2xhc3M9ImNscHctdG9vbHMiPjxzcGFuIGNsYXNzPSJjbHB3LXdjb3VudCIgaWQ9ImNscHdUb3RXb3JkcyI+V29yZHMgJm1kYXNoOyBUYXNrIDE6IDAgJm1pZGRvdDsgVGFzayAyOiAwPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LXNhdmVkIiBpZD0iY2xwd1NhdmVkIj5EcmFmdCBzYXZlZCAmIzEwMDAzOzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1zcGFjZXIiPjwvc3Bhbj48YnV0dG9uIGNsYXNzPSJjbHB3LXRidG4iIGlkPSJjbHB3UmVzZXRBbGwiPlJlc2V0IGFsbDwvYnV0dG9uPjwvZGl2Pic7CiAgICAvLyBzaW0KICAgIGgrPSc8c2VjdGlvbiBjbGFzcz0iY2xwdy1zaW0iPjxkaXYgY2xhc3M9ImNscHctZG90cyIgaWQ9ImNscHdEb3RzIj4nOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgaCs9JzxidXR0b24gY2xhc3M9ImNscHctZG90IiBkYXRhLWRvdD0iJytkLmlkKyciPlRhc2sgJytkLmlkKycgJm1pZGRvdDsgJytlc2MoZC5uYW1lKSsnPC9idXR0b24+JzsgfSk7CiAgICBoKz0nPC9kaXY+PGRpdiBjbGFzcz0iY2xwdy1jYXQiIGlkPSJjbHB3Q2F0Ij4nOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgaCs9dGFza0hUTUwoZC5pZCk7IH0pOwogICAgaCs9JzwvZGl2Pjwvc2VjdGlvbj4nOwogICAgLy8gcnVicmljIHBhbmVsCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctcGFuZWwiPjxoMj5TY29yZSB5b3VyIG93biB3cml0aW5nPC9oMj48cCBjbGFzcz0iY2xwdy1sZWFkIj5UaGVyZSBpcyBubyBhbnN3ZXIga2V5IGZvciBXcml0aW5nLiBSYXRlIGVhY2ggcmVzcG9uc2UgYWdhaW5zdCB0aGUgZm91ciBvZmZpY2lhbCBDRUxQSVAgZGltZW5zaW9ucy48L3A+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXJ1YmdyaWQiIGlkPSJjbHB3UnViR3JpZCI+PC9kaXY+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXNjb3JlYm94Ij4nK2VzYyhXREFUQS5zY29yaW5nTm90ZSkrJzxkaXYgY2xhc3M9ImNscHctY2xicm93Ij48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPk08L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5DTEIgNCZuZGFzaDs1ICZyYXJyOyBkZXZlbG9waW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNsYnRhZyI+Q0xCIDcmbmRhc2g7OCAmcmFycjsgYWRlcXVhdGUmbmRhc2g7Z29vZDwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPkNMQiA5Jm5kYXNoOzEyICZyYXJyOyBzdHJvbmc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICAgIGgrPSc8L3NlY3Rpb24+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LWZvb3QiPkFsbEVuZ2xpc2g0VSAmbWlkZG90OyBDRUxQSVAgV3JpdGluZyBQcmFjdGljZSAmbWlkZG90OyAnK2VzYyhXREFUQS5tZXRhLnNldCkrJzwvZGl2Pic7CiAgICByb290LmlubmVySFRNTD1oOwogICAgYnVpbGRSdWJyaWMoKTsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IHJlbmRlclNhbXBsZShkLmlkKTsgdXBkYXRlV0MoZC5pZCk7IH0pOwogICAgd2lyZUV2ZW50cygpOwogICAgcmVmcmVzaERvdHMoKTsKICAgIHVwZGF0ZVRvdGFscygpOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRSdWJyaWMoKXsKICAgIHZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3UnViR3JpZCIpOyBpZighZykgcmV0dXJuOyB2YXIgaD0iIjsKICAgIFdEQVRBLnJ1YnJpYy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7CiAgICAgIHZhciBvbiA9IHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdICYmIHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdW2ldOwogICAgICBoKz0nPGxhYmVsIGNsYXNzPSJjbHB3LXJ1YicrKG9uPycgZG9uZSc6JycpKyciIGRhdGEtcnVid3JhcD0iJytpKyciPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGF0YS1ydWI9IicraSsnIicrKG9uPycgY2hlY2tlZCc6JycpKyc+PHNwYW4+PHNwYW4gY2xhc3M9ImNscHctcnViLWsiPicrZXNjKHIuaykrJzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1ydWItZCI+Jytlc2Moci5kKSsnPC9zcGFuPjwvc3Bhbj48L2xhYmVsPic7CiAgICB9KTsKICAgIGcuaW5uZXJIVE1MPWg7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTYW1wbGUodCl7CiAgICB2YXIgZD1XREFUQS50YXNrc1t0LTFdLCBpPXN0YXRlLnRhYlt0XSwgcz1kLnNhbXBsZXNbaV07CiAgICB2YXIgYm9keT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhbUJvZHkiK3QpOyBpZighYm9keSkgcmV0dXJuOwogICAgYm9keS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImNscHctc2FtbHZsIj4nK2VzYyhzLmxldmVsKSsnPC9kaXY+PGRpdiBjbGFzcz0iY2xwdy1zYW10ZXh0Ij4nK2VzYyhzLnRleHQpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0iY2xwdy1zYW1oaW50Ij48Yj5XaGF0IHNldHMgdGhpcyBsZXZlbCBhcGFydDo8L2I+ICcrZXNjKHMubm90ZSkrJzwvZGl2Pic7CiAgICB2YXIgdGFicz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1RhYnMiK3QpOyBpZih0YWJzKXsgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0YWJzLmNoaWxkcmVuLGZ1bmN0aW9uKGIsYmkpeyBiLmNsYXNzTGlzdC50b2dnbGUoIm9uIixiaT09PWkpOyB9KTsgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlV0ModCl7CiAgICB2YXIgbj13YyhzdGF0ZS50ZXh0W3RdKTsgdmFyIHBpbGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdXcGlsbCIrdCk7IGlmKCFwaWxsKSByZXR1cm47CiAgICBwaWxsLnRleHRDb250ZW50PW4rKG49PT0xPyIgd29yZCI6IiB3b3JkcyIpOwogICAgcGlsbC5jbGFzc05hbWU9ImNscHctd3BpbGwgIisobjwxNTA\/ImxvdyI6KG48PTIwMD8iZ29vZCI6KG48PTI1MD8ib3ZlciI6Im1heCIpKSk7CiAgICB1cGRhdGVUb3RhbHMoKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlVG90YWxzKCl7CiAgICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUb3RXb3JkcyIpOyBpZihlbCkgZWwuaW5uZXJIVE1MPSJXb3JkcyAmbWRhc2g7IFRhc2sgMTogIit3YyhzdGF0ZS50ZXh0WzFdKSsiICZtaWRkb3Q7IFRhc2sgMjogIit3YyhzdGF0ZS50ZXh0WzJdKTsKICB9CgogIGZ1bmN0aW9uIHJlZnJlc2hEb3RzKCl7CiAgICB2YXIgZG90cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0RvdHMiKTsgaWYoIWRvdHMpIHJldHVybjsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG90cy5jaGlsZHJlbixmdW5jdGlvbihiKXsgdmFyIGlkPStiLmdldEF0dHJpYnV0ZSgiZGF0YS1kb3QiKTsKICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsaWQ9PT1zdGF0ZS5hY3RpdmUpOwogICAgICBiLmNsYXNzTGlzdC50b2dnbGUoImZpbGxlZCIsIGlkIT09c3RhdGUuYWN0aXZlICYmIHdjKHN0YXRlLnRleHRbaWRdKT4wKTsgfSk7CiAgICBXREFUQS50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKGQpeyB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUYXNrIitkLmlkKTsgaWYoZWwpIGVsLmNsYXNzTGlzdC50b2dnbGUoIm9uIixkLmlkPT09c3RhdGUuYWN0aXZlKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzd2l0Y2hUYXNrKHQpeyBzdGF0ZS5hY3RpdmU9dDsgcmVmcmVzaERvdHMoKTsgYnVpbGRSdWJyaWMoKTsKICAgIHZhciBjYXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdDYXQiKTsgaWYoY2F0JiZjYXQuc2Nyb2xsSW50b1ZpZXcpIGNhdC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6InN0YXJ0In0pOyB9CgogIC8vIHRpbWVycwogIGZ1bmN0aW9uIHRpY2sodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBpZihULnJlbTw9MCl7IHN0b3BUaW1lcih0KTsgcmV0dXJuOyB9IFQucmVtLS07IHBhaW50VGltZSh0KTsgaWYoVC5yZW08PTApIHN0b3BUaW1lcih0KTsgfQogIGZ1bmN0aW9uIHBhaW50VGltZSh0KXsgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3QmFyVGltZSIrdCk7IHZhciBUPXN0YXRlLnRpbWVyW3RdOwogICAgaWYoZWwpeyBlbC5pbm5lckhUTUw9IlRpbWUgcmVtYWluaW5nOiA8Yj4iK2ZtdChULnJlbSkrIjwvYj4iOyBlbC5jbGFzc0xpc3QudG9nZ2xlKCJsb3ciLFQucmVtPD0xMjApOyB9CiAgICB2YXIgYnRuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRzdGFydD0iJyt0KyciXScpOyBpZihidG4peyBidG4udGV4dENvbnRlbnQ9VC5ydW4\/IlBhdXNlIHRpbWVyIjooVC5yZW08PTA\/IlRpbWUgdXAiOiJTdGFydCB0aW1lciIpOyBidG4uY2xhc3NMaXN0LnRvZ2dsZSgicnVuIixULnJ1bik7IH0gfQogIGZ1bmN0aW9uIHN0YXJ0VGltZXIodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBpZihULnJlbTw9MCkgcmV0dXJuOyBULnJ1bj10cnVlOyBpZihULml2KSBjbGVhckludGVydmFsKFQuaXYpOyBULml2PXNldEludGVydmFsKGZ1bmN0aW9uKCl7dGljayh0KTt9LDEwMDApOyBwYWludFRpbWUodCk7IH0KICBmdW5jdGlvbiBzdG9wVGltZXIodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBULnJ1bj1mYWxzZTsgaWYoVC5pdil7IGNsZWFySW50ZXJ2YWwoVC5pdik7IFQuaXY9bnVsbDsgfSBwYWludFRpbWUodCk7IH0KICBmdW5jdGlvbiB0b2dnbGVUaW1lcih0KXsgc3RhdGUudGltZXJbdF0ucnVuP3N0b3BUaW1lcih0KTpzdGFydFRpbWVyKHQpOyB9CiAgZnVuY3Rpb24gcmVzZXRUaW1lcih0KXsgc3RvcFRpbWVyKHQpOyBzdGF0ZS50aW1lclt0XS5yZW09V0RBVEEudGFza3NbdC0xXS5taW51dGVzKjYwOyBwYWludFRpbWUodCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBldmVudHMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIHdpcmVFdmVudHMoKXsKICAgIHZhciByb290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3QXBwIik7CiAgICB2YXIgc3RhcnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTdGFydCIpOwogICAgaWYoc3RhcnQpIHN0YXJ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpeyBzd2l0Y2hUYXNrKDEpOyBzdGFydFRpbWVyKDEpOyB9KTsKICAgIHZhciByZXNldEFsbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1Jlc2V0QWxsIik7CiAgICBpZihyZXNldEFsbCkgcmVzZXRBbGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7CiAgICAgIGlmKCFjb25maXJtKCJDbGVhciBib3RoIGRyYWZ0cywgc2VsZWN0ZWQgb3B0aW9uIGFuZCB0aW1lcnMgb24gdGhpcyBkZXZpY2U\/IikpIHJldHVybjsKICAgICAgc3RhdGUudGV4dFsxXT0iIjtzdGF0ZS50ZXh0WzJdPSIiO3N0YXRlLm9wdD1udWxsO3N0YXRlLnJ1YnJpYz17MTp7fSwyOnt9fTsKICAgICAgcmVzZXRUaW1lcigxKTtyZXNldFRpbWVyKDIpOyBzYXZlKCk7IHJlbmRlcigpOyB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXsKICAgICAgdmFyIGVsPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWRvdF0sW2RhdGEtc2FtdG9nZ2xlXSxbZGF0YS10YWJdLFtkYXRhLXRzdGFydF0sW2RhdGEtdHJlc2V0XSxbZGF0YS10bmV4dF0iKTsgaWYoIWVsKSByZXR1cm47CiAgICAgIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS1kb3QiKSl7IHN3aXRjaFRhc2soK2VsLmdldEF0dHJpYnV0ZSgiZGF0YS1kb3QiKSk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtc2FtdG9nZ2xlIikpeyB2YXIgdD0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNhbXRvZ2dsZSIpOyB2YXIgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhbSIrdCk7CiAgICAgICAgaWYocCl7IHAuaGlkZGVuPSFwLmhpZGRlbjsgZWwudGV4dENvbnRlbnQ9cC5oaWRkZW4\/IkNsaWNrIGhlcmUgdG8gdmlldyBzYW1wbGUgcmVzcG9uc2VzIjoiSGlkZSBzYW1wbGUgcmVzcG9uc2VzIjsgaWYoIXAuaGlkZGVuKSByZW5kZXJTYW1wbGUodCk7IH0gfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10YWIiKSl7IHZhciB0dD0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRhYiIpOyBzdGF0ZS50YWJbdHRdPStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpOyByZW5kZXJTYW1wbGUodHQpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRzdGFydCIpKXsgdG9nZ2xlVGltZXIoK2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10c3RhcnQiKSk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdHJlc2V0IikpeyByZXNldFRpbWVyKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdHJlc2V0IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRuZXh0IikpeyB2YXIgY3VyPStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdG5leHQiKTsgaWYoY3VyPFdEQVRBLnRhc2tzLmxlbmd0aCl7IHN3aXRjaFRhc2soY3VyKzEpOyB9IH0KICAgIH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGZ1bmN0aW9uKGUpeyB2YXIgdGE9ZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtdGFdIik7IGlmKCF0YSkgcmV0dXJuOwogICAgICB2YXIgdD0rdGEuZ2V0QXR0cmlidXRlKCJkYXRhLXRhIik7IHN0YXRlLnRleHRbdF09dGEudmFsdWU7IHVwZGF0ZVdDKHQpOyByZWZyZXNoRG90cygpOyBzYXZlKCk7IH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixmdW5jdGlvbihlKXsKICAgICAgdmFyIG9wdD1lLnRhcmdldC5jbG9zZXN0KCdpbnB1dFtuYW1lPSJjbHB3T3B0Il0nKTsKICAgICAgaWYob3B0KXsgc3RhdGUub3B0PW9wdC52YWx1ZTsgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcHR3cmFwXSIpLGZ1bmN0aW9uKGwpeyBsLmNsYXNzTGlzdC50b2dnbGUoInNlbCIsbC5nZXRBdHRyaWJ1dGUoImRhdGEtb3B0d3JhcCIpPT09c3RhdGUub3B0KTsgfSk7IHNhdmUoKTsgcmV0dXJuOyB9CiAgICAgIHZhciBydWI9ZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcnViXSIpOwogICAgICBpZihydWIpeyB2YXIgaT0rcnViLmdldEF0dHJpYnV0ZSgiZGF0YS1ydWIiKTsgaWYoIXN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdKSBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXT17fTsgc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV1baV09cnViLmNoZWNrZWQ7CiAgICAgICAgdmFyIHdyYXA9cnViLmNsb3Nlc3QoIltkYXRhLXJ1YndyYXBdIik7IGlmKHdyYXApIHdyYXAuY2xhc3NMaXN0LnRvZ2dsZSgiZG9uZSIscnViLmNoZWNrZWQpOyBzYXZlKCk7IH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYm9vdCgpeyBsb2FkKCk7IGluamVjdENTUygpOyByZW5kZXIoKTsgfQogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGJvb3QpOyBlbHNlIGJvb3QoKTsKfSkoKTsKCg==\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Writing Set 3 Practice Test 2: 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-6317","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6317","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=6317"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6317\/revisions"}],"predecessor-version":[{"id":6577,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6317\/revisions\/6577"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}